统一animation.play()不起作用

时间:2014-03-03 13:51:37

标签: c# animation scripting unity3d

我有一个简单的脚本应该为我的播放器设置动画,但它不起作用。我读了一段时间的论坛,有些人有关于动画遗留选项的问题,我修复了它,但我的角色仍然没有动画,并且没有任何编译错误。这是我的剧本:

using UnityEngine;
using System.Collections;

public class maincharacter : MonoBehaviour {

    void Start () {
    }

    float xSpeed = 10f;
    float zSpeed = 10f;
    public float playerMovementSpeed = 10f;

    void Update () {
       float deltaX = Input.GetAxis ("Horizontal") * xSpeed;
       float deltaZ = Input.GetAxis ("Vertical") * zSpeed;

       Vector3 trans = new Vector3 (deltaX + deltaZ ,0f,deltaZ - deltaX);
       transform.Translate (trans.normalized * Time.deltaTime * playerMovementSpeed, Space.World);

       animation.Play ("mcrunsw");

       /*if (deltaX != 0 || deltaZ != 0) {
                 animation.Play ("mcrunsw");
          }*/
    }
}

这是我的gameObject和动画: enter image description here

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:6)

来自manual

  

Play()将以名称动画开始动画,或播放默认值   动画。动画将突然播放而不进行任何混合。

由于你每帧调用一次,我想它只会显示动画的第一帧,然后在下一次动画中停止下一次动画。播放。试试这个:

if (!animation.isPlaying) {
    animation.Play();
}

一般来说,我建议使用Mechanim进行角色动画。

答案 1 :(得分:1)

另一个可行的选择以及上述解决方案是CrossFadeQueued。

您只需使用下面的功能,它就可以无缝地CrossFade。

用法为PlayAnimation("mcrunsw");

function PlayAnimation(AnimName : String) {
    if (!animation.IsPlaying(AnimName))
        animation.CrossFadeQueued(AnimName, 0.3, QueueMode.PlayNow);
}