调用 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: c# 怎样调用另外一个c#脚本里面东西?