ZBLOG

using UnityEngine; using System.Collections; public class PlayerController1 : MonoBehaviour { public GameObject circlePrefab; private GameObject currentCircle; private Vector3 targetPosition; private bool facingRight = true; /...

要实现这个功能,你需要使用 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);

}

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=1135

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?