如何在Unity3d,C#中按下键时播放AnimationClip?

时间:2017-03-01 12:39:14

标签: c# animation unity3d

  1. 我尝试过这段代码,但它没有用。
  2. 有人可以帮助我,有人可以解释Unity 3D中的动画吗?我已经尝试了很多,google,youtube等。

    using UnityEngine;
    using System.Collections;
    
    public class PlayAnimation : MonoBehaviour {
    
        public AnimationClip walk;
        Animation anim;
    
        void Update () {
            if (Input.GetKeyDown(KeyCode.W)){
                anim.clip = walk;
                anim.Play();        
            }
        }
    }
    

4 个答案:

答案 0 :(得分:3)

anim变量未初始化。您可以通过两种方式初始化它:

<强> 1 .GetComponent

如果Animation组件附加到同一个Gameobject,则PlayAnimation脚本附加到:

void Start()
{
    anim = GetComponent<Animation>();
}

如果Animation组件附加到不同的Gameobject:

void Start()
{
    anim = GameObject.Find("GameObjectAnimationIsAttachedTo").GetComponent<Animation>();
}

2 。设置anim变量public,然后从编辑器中分配。

Animation anim;应为public Animation anim;。现在,将带有Animation组件的GameObject拖到anim变量。

答案 1 :(得分:3)

根据代码的外观,您实际上从未在组件上引用附加的Animaton。尝试在Start方法中分配动画它的组件,如下所示:

public class PlayAnimation : MonoBehaviour {

    public AnimationClip walk;
    Animation anim;

    void Start() {
        anim = GetComponent<Animation>();
    }

    void Update () {
        if (Input.GetKeyDown(KeyCode.W)){
            anim.clip = walk;
            anim.Play();        
        }
    }
}

答案 2 :(得分:1)

现在这是我的代码,感谢Frederik,它可以运行。 我现在得到了参数如何工作和动画师。

 using UnityEngine;
 using System.Collections;

public class PlayAnimation : MonoBehaviour {
public Animator animator;
byte idle=0;
byte walk=1;
byte sprint=2;

// Use this for initialization
void Start () {
    animator = GetComponent<Animator> ();
}

// Update is called once per frame
void Update () {
    if (Input.GetKey (KeyCode.W)) {
        animator.SetInteger ("Anumber", walk);
    } else if (Input.GetKey (KeyCode.A)) {
        animator.SetInteger ("Anumber", walk);
    } else if (Input.GetKey (KeyCode.S)) {
        animator.SetInteger ("Anumber", walk);
    } else if (Input.GetKey (KeyCode.D)) {
        animator.SetInteger ("Anumber", walk);
    } else {
        animator.SetInteger ("Anumber", idle);
    }
}
    }

答案 3 :(得分:0)

只是为了记录,在更新中播放动画之前必须检查是否没有播放。由于输入在更新中运行了几次

   if(!anim.IsPlaying("YourClipName"){
                        anim.clip = walk;
                         anim.Play();
                     }