动画位移的控制有两种,一种是动画本身带有位移,第二种是没有位移的动画。
对于没有位移的动画,即Root Motion为0的动画,想让动画运动的时候有位移,我们可以使用动画曲线加脚本的形式来控制,也可以单独使用脚本来控制动画的位移。
假如我们有一个跑动的动画run,这个动画没有位移
我们点击run动画中的Curves选项
加曲线,使曲线的y轴为1,这个值作为动画位移的速度,曲线名字为RunSpeed
创建脚本
RootController.cs
public class RootController : MonoBehaviour {
void OnAnimatorMove()
{
Animator animator = GetComponent<Animator>();
if (animator)
{
Vector3 newPosition = transform.position;
newPosition.z += animator.GetFloat("RunSpeed") * Time.deltaTime;
transform.position = newPosition;
}
}
}
这时动画就有位移了
当然我们也可以不用动画曲线,直接用脚本控制
public class RootController : MonoBehaviour {
public float speed = 2;
void OnAnimatorMove()
{
Animator animator = GetComponent<Animator>();
if (animator)
{
Vector3 newPosition = transform.position;
//newPosition.z += animator.GetFloat("RunSpeed") * Time.deltaTime;
newPosition.z += speed * Time.deltaTime;
transform.position = newPosition;
}
}
}