目录

概念

类型

使用混合树(Blend Tree)

创建混合树

 示例代码

使用跨淡入淡出(Cross-Fade)

示例代码

 总结


概念

在 Unity 中,混合动画(Animation Blending)是指在多个动画之间平滑过渡,以创建更自然的角色动作。这对于角色需要从一种状态过渡到另一种状态(例如从行走到跑步,或者从站立到跳跃)非常有用。

类型

混合动画可以分为两种主要类型:

1. 混合树(Blend Tree):
    - 这是 Unity Animator 中的一种特殊状态,用于在多个动画剪辑之间进行混合。
    - 可以根据一个或多个参数(通常是速度、方向等)动态混合不同的动画。

2. 跨淡入淡出(Cross-Fade):
    - 这是在不同动画状态之间进行平滑过渡的一种方式。
    - 通过 Animator Controller 脚本 API,可以实现不同动画状态之间的平滑切换。

使用混合树(Blend Tree)

混合树在需要根据一个或多个参数动态混合动画时非常有用,例如根据角色的移动速度在闲置、行走和跑步动画之间过渡。

创建混合树

1. 创建一个 Animator Controller:右键单击项目窗口,选择 `Create > Animator Controller`。

2. 打开 Animator 窗口:选择创建的 Animator Controller,然后在菜单栏中选择 `Window > Animation > Animator` 打开 Animator 窗口。

3. 创建混合树状态:
   - 右键单击 Animator 窗口中的空白区域,选择 `Create State > From New Blend Tree`。


   - 双击创建的混合树状态,打开混合树编辑器。

4. 添加动画剪辑:
   - 在混合树编辑器中,点击 `Blend Tree` 节点,然后在检查器面板中点击 `Add Motion Field` 添加动画剪辑。


   - 将需要混合的动画剪辑拖动到相应的 `Motion` 字段。

Automate Threshold的意思是自动阈值,取消勾选后,就可以自己定义阈值范围

5. 设置混合参数:
   - 在检查器面板中,点击 `Blend` 下拉菜单,选择一个参数(例如 `Blend`)。
   - 你可以根据这个参数的值动态混合不同的动画。

 示例代码

假设你有一个混合树,用于在闲置、行走和跑步动画之间过渡,可以通过以下脚本控制角色的移动:
 

using UnityEngine;

public class CharacterController : MonoBehaviour
{
    private Animator animator;
    public float speed = 0f;

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        Vector3 direction = new Vector3(horizontal, 0, vertical);

        // 设置速度参数
        speed = direction.magnitude;
        animator.SetFloat("Speed", speed);

        // 移动角色
        transform.Translate(direction * Time.deltaTime * 2f);
    }
}

在此示例中,`Speed` 参数用于控制混合树在闲置、行走和跑步动画之间的过渡。

使用跨淡入淡出(Cross-Fade)

跨淡入淡出适用于在两个具体动画状态之间平滑过渡,例如从闲置状态切换到跳跃状态。

示例代码

以下是一个简单的跨淡入淡出示例:

using UnityEngine;

public class CharacterController : MonoBehaviour
{
    private Animator animator;

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            animator.CrossFade("Jump", 0.2f);
        }
    }
}

在此示例中,当按下空格键时,角色从当前状态平滑过渡到跳跃状态,过渡时间为 0.2 秒。

 总结

- 混合树:适用于需要根据一个或多个参数动态混合多个动画的情况,例如根据角色速度在闲置、行走和跑步动画之间过渡。
- 跨淡入淡出:适用于在两个具体动画状态之间进行平滑过渡。

通过合理使用混合动画技术,可以使角色的动画过渡更加自然,提高游戏的视觉体验。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐