调用 Unity Animator.Play() 时出现错误消息:层 -1 无效?

Posted

技术标签:

【中文标题】调用 Unity Animator.Play() 时出现错误消息:层 -1 无效?【英文标题】:Error message when calling Unity Animator.Play() : Invalid Layer -1? 【发布时间】:2017-08-18 05:33:25 【问题描述】:

我正在尝试用一个简单的状态机做一个简单的动画,但是 Unity 打印出一条错误消息:

层索引“-1”无效 UnityEngine.Animator:Play(String, Int32, Single)

我已经验证我的动画状态机位于“基础层”,默认情况下它的 ID = -1。

另外,我已经打印出了我的游戏中的所有层 ID,它们都是“-1”,我不确定这是否是正确的答案,因为我认为每个层都应该有一个唯一的(或不同)身份证?

但是,无论如何,不​​幸的是,Unity 仍然会打印出同样的错误。

我使用的是最新版本的 Unity 5.5.2

代码如下:

using UnityEngine;

public class Thanh_Space_Man : MonoBehaviour 

    public Animator anim;

    // Use this for initialization
    void Start () 
    
        anim = GetComponent<Animator> ();   
    

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

        if(Input.GetKeyDown("1"))
                   
            anim.Play ("Run_Rifle_Foreward", -1, 0f);           
        

        if(Input.GetKeyDown("2"))
        
            anim.Play ("Idle_Rifle_01", -1, 0f);
        


    

仅供参考:我是 Unity 的初学者。 :-)

【问题讨论】:

动画状态肯定拼写正确吗?即“Run_Rifle_Forward”。这必须与动画状态之一完全相同。 是的,拼写正确。感谢您的评论。 -1 表示找不到,我想。这意味着当您打印它时,您做错了。我也犯了同样的错误!我认为第一层从 1 开始。 查看方法如下:LayerMask.NameToLayer("UI") --> 5 @Fredrik:从这个 Unity 文档 docs.unity3d.com/ScriptReference/Animator.Play.html 中,它显示方法 Play() 将 -1 作为图层的默认参数。 【参考方案1】:

这些是我在使用 LayerMask.NameToLayer 时得到的值,其中“CustomLayer”是我在 Tags & Layer manager 中手动创建的层。

Debug.Log(LayerMask.NameToLayer("asd")); // => -1
Debug.Log(LayerMask.NameToLayer("UI")); // => 5
Debug.Log(LayerMask.NameToLayer("CustomLayer")); // => 8
Debug.Log(LayerMask.NameToLayer("customlayer")); // => -1
Debug.Log(LayerMask.NameToLayer("Default")); // => 0

更新:

OP 发现问题:

我刚刚发现错误是我在调用 Animator.Play() 时拼错了动画状态的名称。在我使用正确的州名后,它就可以正常工作了。更有趣的是,无论我传入的Layer ID是0还是-1,当我调用Animator.Play()时,这两种情况都有效。

【讨论】:

我的图层被列为:Everything, Nothing, Default, UI, Water,... 这些图层中的每一个都有一个唯一的(不同的)ID。但是,当我调用 anim.Play ("Run_Rifle_Forward", ID, 0f);并传入整数ID如1、2、4或5,Unity总是说“Invalid Layer index 1”或2或4或5......这很奇怪。我在想我的代码中还有其他问题,或者我的场景设置不正确...... 哦,好的,抱歉 - 我以为您遇到了 NameToLayer 问题。我会尝试重现您的问题 谢谢,弗雷德里克。我从你那里学到了一些调试技术。 :-) 我刚刚发现错误是我在调用 Animator.Play() 时拼错了动画状态的名称。在我使用正确的州名后,它就可以正常工作了。更有趣的是,无论我将 Layer ID 传递为 0 还是 -1,当我调用 Animator.Play() 时,它都适用于这两种情况。 :-)

以上是关于调用 Unity Animator.Play() 时出现错误消息:层 -1 无效?的主要内容,如果未能解决你的问题,请参考以下文章

怎么用unity3d调用摄像头

unity脚本中变量在另一个脚本如何调用

unity中怎样调用其他脚本变量

在unity3D: c# 怎样调用另外一个c#脚本里面东西?

在 Unity 中,Unity 如何神奇地调用所有“接口”?

unity中怎样让一个对象切换脚本