目录
🟥 效果展示
🟧 角色运动控制
🟨Blend Tree混合树
🟥 效果展示
使用Blend Tree混合树,实现角色的左右转向。
🟧 角色运动控制
1️⃣创建角色运动动画
分别创建并添加角色左右转的动画, Mirror为镜像动画。
2️⃣添加运动控制代码
- Vertical向前为正,向后为负。
- Horizontal向左为负,向右为正。
🟨Blend Tree混合树
1️⃣BlendTree作用:
将不同动画混合,通过调节一个数值的大小,来控制混合动画更趋向于哪个单个动画
2️⃣新建方法:
- Animator窗口右键选择Create State—From New Blend Tree,双即可进入编辑。
- 双击空白处或选择Base Layer可返回上一层。
1️⃣ 设置Animation Clip
将Idle、Walk、Run混合在一起。
因为这三个动画对旋转、Y轴无影响,只对Z方向有影响,所以在Blend Tree的Blend Type选择1D。
2️⃣ 2设置Motion Field
在Motion栏添加三个Add Motion Field,放入这三个动画(源文件)。
Automate Thresholds:自动生成阈值匹配阈值,当取消勾选时,便可手动设置上方的阈值Threshold,可调节混合区域的大小
Computer Thresholds:计算阈值。
在此案例中,只有Z轴发生变化,所以按照Z轴来控制阈值比较合适,它的Parameter范围不再是0-1,而变成系统所计算的范围了,我们只需要控制这个Parameter数值,便可控制这个混合动画的状态了
Adjust Time Sacle:
调整时间比例,可手动在右上角“Change animation speed”更改动画的时间比例,也可点击Adjust Time Scale栏里的Homogeneous Speed(均匀的速度,使动画更平滑),Reset Time Scale是将时间比例重置为1
3️⃣ 代码解析
这三个动画的混合相当于形成从Idle到Run的渐变状态,继续沿用Speed参数作为控制混合树的参数,将原先的Idle、Walk、Run三个Animation Clips替换为LocalMotion(混合树),计算所得的Idle到Run区间从[0,1]—[0,4.5],所以代码需乘以4.5倍
代码如下:
using UnityEngine;
public class Player : MonoBehaviour {
Animator anim;
int speedID = Animator.StringToHash("Speed");
void Start () {
anim = GetComponent<Animator>();
}
void Update () {
//speedID仅代替Speed
anim.SetFloat(speedID, Input.GetAxis("Vertical")*4.5f);
}
}
ok,测试试试吧~
小提示:批量注释方法
选中目标,Ctrl+K+C,批量注释
Ctrl+K+U,批量取消注释