Unity3D:返回空闲状态动画

时间:2016-07-16 14:40:18

标签: c# animation unity3d

我遇到了在游戏中返回我的空闲状态动画的问题。这个video就是我的问题的一个例子。我的播放器没有回到空闲状态动画,我尝试将其添加到我的代码中:

anim.SetBool ("walking", false); 

(这位于我code

的末尾附近)

但是happens。这不是我想要的。在我向您展示的first视频中,它显示我点击了walking parameter off,以便我可以向您展示如果我的播放器在到达目的地后停止播放的动画效果。在视频中您可以看到我的玩家在走下来之后面对错误的方式,它面对wayway,我也想修复,但不知道怎么做。所以任何人都可以帮助我解决我的两个问题,即:

  1. 一旦我的玩家到达目的地,返回空闲动画。
  2. 并确保我的玩家面对正确的方向。我的玩家的精灵image
  3. 这是我的代码:

    第二次修改

    private Animator anim;
    public float speed = 15f;
    private Vector3 target;
    private bool touched;
    private bool playerMovementRef;
    
    void Start () 
    {
        target = transform.position;
        anim = GetComponent<Animator> ();
    }
    
    void Update () 
    {
    
    if(transform.position == target)
    {
        anim.SetBool ("walking", false);
    }
        if (Input.GetMouseButtonDown (0))
           {
            Vector3 mousePosition = Input.mousePosition;
            mousePosition.z = 10; // distance from the camera
            target = Camera.main.ScreenToWorldPoint (mousePosition);
            target.z = transform.position.z;
    
            var movementDirection = (target - transform.position).normalized;
                Vector3 animDirection = Vector3.zero;
                // Use >= to default to horizontal on both being equal
    
            if (movementDirection.x > movementDirection.y) 
                animDirection.x = 1;
            else
                animDirection.y = 1;
    
            anim.SetBool ("walking", true);
            anim.SetFloat ("SpeedX", movementDirection.x);
            anim.SetFloat ("SpeedY", movementDirection.y);
    
            Debug.LogFormat ("X: {0}, Y: {1}", movementDirection.x, movementDirection.y);
    
            if (movementDirection.x > 0)
            {
                anim.SetFloat ("LastMoveX", 1f);
            }
            else if (movementDirection.x < 0) 
            {
                anim.SetFloat ("LastMoveX", -1f);
            } 
            else 
            {
                if (movementDirection.y > 0)
                {
                    anim.SetFloat ("LastMoveY", 1f);
                } 
                else if (movementDirection.y < 0)
                {
                    anim.SetFloat ("LastMoveY", -1f);
                } 
                else 
                {
                    anim.SetFloat ("LastMoveY", 0f);
                } 
            }   
        } 
        else 
        {
                transform.position = Vector3.MoveTowards (transform.position, target, speed * Time.deltaTime);
        }
    }
    

1 个答案:

答案 0 :(得分:1)

检测播放器是否在当前目的地。您可以从target获取当前目的地。如果它在当前目的地,那么就行走&#34;行走&#34;布尔假。面对正确的方向应该可以正常使用。

将此块放在Update()

if(transform.position == target)
{
    anim.SetBool ("walking", false);
}