官方文档 https://docs.unity3d.com/Manual/class-BlendTree.html
利用Mecanim的混合树可实现两种动画状态之间的渐变。
一、在Animator窗口点右键
二、双击Blend Tree进行编辑
三、在Parameters列表中创建名叫Walk的Float变量。
四、选中Blend Tree,在Object Inspector面板进行设置。
(1)Blend Type选择2D Freeform Cartesian
(2)Parameters参数设置Walk
(3)点加号添加两个动画字段,并设置值。
2D Simple Directional:最好在运动表示不同方向(例如“向前走”、“向后退”、“向左走”和“向右走”或者“向上瞄准”、“向下瞄准”、“向左瞄准”和“向右瞄准”)时使用。根据需要可以包括位置 (0, 0) 处的单个运动,例如“空闲”或“瞄准”。在 Simple Directional 类型中,在同一方向上_不_应该有多个运动,例如“向前走”和“向前跑”。
2D Freeform Directional:运动表示不同方向时,也使用此混合类型,但是您可以在同一方向上有多个运动,例如“向前走”和“向前跑”。在 Freeform Directional 类型中,运动集应始终包括位置 (0, 0) 处的单个运动,例如“空闲”。
2D Freeform Cartesian:最好在运动不表示不同方向时使用。凭借 Freeform Cartesian,X 参数和 Y 参数可以表示不同概念,例如角速度和线速度。一个示例是诸如“向前走不转弯”、“向前跑不转弯”、“向前走右转”、“向前跑右转”之类的运动。
Direct:此类型的混合树让用户直接控制每个节点的权重。适用于面部形状或随机空闲混合。
五、调整Walk不同的值,在预览窗口查看动画效果
六、编写脚本控制动画
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 基于Mecanim Blend Tree的脚本机制
/// </summary>
public class CharControl : MonoBehaviour {
private Animator thisAnimator;
//转成整型,可提高代码执行速度。
private int walkFloat = Animator.StringToHash("Walk");
private float t;
void Awake()
{
thisAnimator = GetComponent<Animator>();
}
void Update () {
t += 0.01f;
//t的值从0逐渐加到1,动画从自然态逐渐变为走动态
thisAnimator.SetFloat(walkFloat, t);
}
}