要实现这个功能,你需要使用 Animator 控制器,并在其中创建一个名为 “Knight” 的控制器。在该控制器中,创建两个状态,一个名为 “idle”,另一个名为 “walk”。然后,在其中添加适当的闲置和移动动画。
接下来,将该控制器分配给角色对象的 Animator 组件,并确保启用了 Apply Root Motion 选项。
最后,在 PlayerController1 脚本中,在 MoveToTarget() 方法中设置角色的动画状态。如果目标位置与当前位置之间的距离大于 bufferDistance(例如0.01f),则将角色的动画状态设置为 “walk”。否则,将其设置为 “idle”。
以下是示例代码:
private Animator animator;
IEnumerator MoveToTarget() {
// ...
while (Vector3.Distance(transform.position, targetPosition) > bufferDistance)
{
// ...
if (Vector3.Distance(transform.position, targetPosition) < moveSpeed * Time.deltaTime)
{
transform.position = targetPosition;
SetAnimationState("idle");
yield break;
}
transform.position = Vector3.MoveTowards(transform.position, targetPosition, moveSpeed * Time.deltaTime);
SetAnimationState("walk");
yield return null;
}
SetAnimationState("idle");
}
void SetAnimationState(string stateName) {
if (animator == null)
animator = GetComponent<Animator>();
animator.Play(stateName);
}