Unity 动画混合树实例(Blend Tree)

本文介绍了Unity3D中角色动画混合的概念,包括1D、2DSimpleDirectional、2DFreeformDirectional和2DFreeformCartesian四种混合类型,并通过实例详细解析了如何创建和配置2DFreeformCartesian混合树来实现行走、跑步和转向的平滑过渡。代码示例展示了如何通过控制‘Walk’和‘Turn’参数来动态改变动画状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看效果

 

 

 游戏动画中的一项常见任务是在两个或更多相似运动之间进行混合。也许最熟知的示例就是根据角色的速度来混合行走和奔跑动画。另一个示例是角色在奔跑期间转向时向左或向右倾斜。

使用方法:

1.右键单击 Animator Controller 窗口上的空白区域。 1.从显示的上下文菜单中,选择 Create State > From New Blend Tree。 1.双击混合树 (Blend Tree) 以进入混合树视图 (Blend Tree Graph)。

Animator 窗口现在显示整个混合树的图示,而 Inspector 显示当前选定节点及其直接子节点。

 类型

1.  1D:一维的混合,一个参数控制动画的切换。

 

2.  2D Simple Directional(2D简单方向):当你的运动代表不同的方向,如“向前走”,“向后走”,“向左走”,“向右走”,或“向上瞄准”,“向下瞄准”,“左瞄“和”右瞄“。当然了,可以在(0,0)处包含一个默认动作类似“空闲站立”或“直线瞄准”。与1D混合树不同的是,2D Simple Directional   不是在同一个方向上的多个动作,比如“走”和“跑”。

3.  2D Freeform Directional(2D自由方向):动画运用有不同的方向时,也可以使用这种混合类型:可以在同一个方向上有多个运动,例如“走”和“跑”。在Freeform Directional类型中,(0,0)位置必须包含一个默认动作,如“空闲站立”。

4.  2D Freeform Cartesian(2D自由笛卡儿):当混合的2个参数不代表不同的方向时使用。使用Freeform Cartesian,参数X和Y可以表示不同的概念类型,例如角速度和线速度。举个例子:“向前走不转向”,“向前跑不转向”,“向前走并右转”,“向前跑并右转”等动作。

如果角色动画包含站立、走、跑和转向,非常符合2D Freeform Cartesian这种类型。我们的实例中就用的这个类型。

实例

实例中,我们用到了17个动画,包含,静止状态,前走后走左走右走4个,左前走左后走右前走右后走4个,同理跑也是8个动画。

 

 使用Walk和Turn控制动画的播放,其中Walk为PosX轴,Turn为PosY轴,在三维世界中,分别代表人物的前后移动和左右移动。我们手动输入参数,例如当(-0.5,0)的时候代表向后,(1,1)的时候代表想右前方跑。配置好混合树以后就可以用代码控制这些参数的变化从而播放相应的动画。

代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;

public class RobotKyleController : MonoBehaviour
{
    Animator m_Animator;
    private Vector3 m_Move;


    void Start()
    {
        m_Animator = GetComponent<Animator>();
    
    }
    private void FixedUpdate()
    {
        float h = CrossPlatformInputManager.GetAxis("Horizontal");
        float v = CrossPlatformInputManager.GetAxis("Vertical");

        if (Input.GetKey(KeyCode.LeftShift))
        {
            m_Move = v * Vector3.forward + h * Vector3.right;
        }
        else
        {
            m_Move =( v * Vector3.forward + h * Vector3.right)*0.5f;
        }
        UpdateAnimator(m_Move);

    }
    void UpdateAnimator(Vector3 move)
    {
        m_Animator.SetFloat("Walk", move.z, 0.1f, Time.deltaTime);
        m_Animator.SetFloat("Turn", move.x, 0.1f, Time.deltaTime);
       
    }
 
}

Unity中,Blend Tree混合树)是一种用于动画状态机(Animator Controller)中的工具,用于根据一个或多个参数在不同的动画状态之间进行平滑过渡。Blend Tree特别适用于处理复杂的动画混合,例如角色的行走、跑步和跳跃动画。 以下是获取和配置Blend Tree的基本步骤: 1. **创建Animator Controller**: - 在Unity的Project窗口中,右键点击选择`Create > Animator Controller`,并为其命名。 - 双击打开Animator Controller。 2. **创建Blend Tree**: - 在Animator窗口中,右键点击空白区域,选择`Create State > From New Blend Tree`。 - 双击新创建的Blend Tree节点,进入Blend Tree编辑模式。 3. **配置Blend Tree参数**: - 在Animator窗口的左侧,点击`Parameters`选项卡,添加一个或多个用于控制混合的参数(例如`Speed`)。 - 返回Blend Tree编辑模式,在Inspector窗口中,将`Blend Type`设置为`1D`、`2D`或`Direct`,根据需要选择。 4. **添加动画状态**: - 在Blend Tree编辑模式中,点击`+`按钮,选择`Add Motion Field`来添加动画状态。 - 将相应的动画剪辑拖拽到Motion字段中,并设置每个动画的阈值(例如`Speed`的值)。 5. **调整混合参数**: - 在Animator窗口中,调整参数的值,观察动画的混合效果。 - 可以通过脚本动态修改参数值,实现动画的动态切换。 以下是一个简单的示例代码,展示如何在脚本中控制Blend Tree: ```csharp using UnityEngine; public class BlendTreeController : MonoBehaviour { private Animator animator; void Start() { animator = GetComponent<Animator>(); } void Update() { // 获取输入轴的值,例如水平输入 float speed = Input.GetAxis("Horizontal"); // 设置Animator参数 animator.SetFloat("Speed", speed); } } ``` 通过以上步骤和代码示例,你可以在Unity中获取和配置Blend Tree,实现平滑的动画过渡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值