首页 > 解决方案 > 从代码设置动画参数时出现警告?

问题描述

我关注了一个学习 Unity 的 Youtube 视频,但我遇到了一个我不明白的奇怪错误。

public class Player: MonoBehaviour
{

    [SerializeField]
    private float jumpmovement = 11f;
    [SerializeField]
    private float movement = 10f;
    private float movementx;
    [SerializeField]
    private Rigidbody2D mybody;
    private Animator anim;
    [SerializeField]
    private string Walk_Ani = "Player is walking ";
    private SpriteRenderer sr;


    private void Awake1()
    {
        mybody = GetComponent<Rigidbody2D>();
        anim = GetComponent<Animator>();
        sr = GetComponent<SpriteRenderer>();

    }
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {

        Awake1();
        Playerkeymove();
        animateplayer1();
    }
    void Playerkeymove()
    {
        movementx = Input.GetAxisRaw("Horizontal");
        // Debug.Log(movementx);
        transform.position += new Vector3(movementx, 0f, 0f) * movement * Time.deltaTime;
       // Debug.Log(transform.position);
    }
    void animateplayer1()
    {
        // anim.SetBool(Walk_Ani , true);
        // we are going to the right side
        if (movementx > 0)
        {
            anim.SetBool(Walk_Ani, true);
            sr.flipX = false;
        }
        else if (movementx < 0)
        {
            // we are going to the left side
            anim.SetBool(Walk_Ani, true);
            sr.flipX = true;
        }
        else
        {
            anim.SetBool(Walk_Ani, false);
        }
    }

}

我的控制台中的错误在第 66 行。我完全按照视频进行,甚至尝试使用视频的源代码。

标签: c#unity3d

解决方案


这不是一个错误,它是一个warning. Unity 告诉您,在脚本所在的对象上Player is walking 分配给您的动画不存在名为 ,的动画参数。Animator

除此代码外,您还需要创建一个Animation具有特定Animation Paramater调用的Player is walking . 如果您已经有了这个并按照您提到的本教程进行操作,则很可能是一个错字,您需要删除当前所拥有的额外尾随空格Player is walking ,它可能需要是Player is walking.

编辑:另外,正如在这个问题的评论中提到的那样,您很可能希望将函数更改Awake1Awake不是Update.

private void Awake()
{
    mybody = GetComponent<Rigidbody2D>();
    anim = GetComponent<Animator>();
    sr = GetComponent<SpriteRenderer>();
}

// Update is called once per frame
private void Update()
{
    Playerkeymove();
    animateplayer1();
}

Awake是所有 Monobehaviour 使用的特殊方法,一般用于初始化引用。每帧调用它是非常浪费的,因为当这些对象没有改变时,您会不断地重新分配这些对象的引用。


推荐阅读