C# 为什么我';当尝试播放动画剪辑时,我遇到异常InvalidOperationException?
我正在尝试播放包含C# 为什么我';当尝试播放动画剪辑时,我遇到异常InvalidOperationException?,c#,unity3d,C#,Unity3d,我正在尝试播放包含maximo的所有动画剪辑 我调用方法Init并开始播放动画的唯一一个剧本是在以下脚本中: foreach (var randClip in clipsList) 您在中的AnimatorController的更新中多次启动协同程序 playanimation.Init(); 这是“不允许的”->请查看您的异常 确保只运行一次例程: clipsList.Shuffle(); 或/和通常优化AnimatorController以避免这些冗余调用。您在中的AnimatorC
maximo
的所有动画剪辑
我调用方法Init并开始播放动画的唯一一个剧本是在以下脚本中:
foreach (var randClip in clipsList)
您在中的
AnimatorController
的更新中多次启动协同程序
playanimation.Init();
这是“不允许的”->请查看您的异常
确保只运行一次例程:
clipsList.Shuffle();
或/和通常优化AnimatorController
以避免这些冗余调用。您在中的AnimatorController
的更新中多次启动协同程序
playanimation.Init();
这是“不允许的”->请查看您的异常
确保只运行一次例程:
clipsList.Shuffle();
或/并通常优化动画控制器
,以避免这些冗余调用。尝试了脚本,但无法复制。在foreach循环中是否还有其他更改randClip
列表的操作,如添加或删除项目?请查看错误消息。它告诉你什么?它告诉您“枚举操作可能无法执行”,因为“集合已被修改”。现在,正如您所指出的,这里抛出异常:foreach(clipsList中的var randClip)
。那么,这个错误可能涉及哪些集合?在何处(何时)修改该集合?如果您弄明白了这一点,那么您将需要弄明白(这是您必须进行的疑难解答中更困难的部分)为什么在调用foreach(clipsList中的var randClip)时调用修改集合的方法
loop is executingAs在你发布它时说它对我有效。我在我的问题中添加了唯一一个调用方法Init并开始播放动画的脚本。但我不确定为什么这会是一个问题。我尝试了你的脚本,但无法复制它。在foreach循环中是否还有其他更改randClip
列表的操作,如添加或删除项目?请查看错误消息。它告诉你什么?它告诉您“枚举操作可能无法执行”,因为“集合已被修改”。现在,正如您所指出的,这里抛出异常:foreach(clipsList中的var randClip)
。那么,这个错误可能涉及哪些集合?在何处(何时)修改该集合?如果您弄明白了这一点,那么您将需要弄明白(这是您必须进行的疑难解答中更困难的部分)为什么在调用foreach(clipsList中的var randClip)时调用修改集合的方法
loop is executingAs在你发布它时说它对我有效。我在我的问题中添加了唯一一个调用方法Init并开始播放动画的脚本。但是我不确定为什么这会是一个问题。对于这个错误,这可以正常工作,但是现在我在编辑器中得到警告,每次它试图在以下行的while循环中播放动画:animator.play(randClip.name);警告是:无效的层索引“-1”所有这些mixamo动画都在子状态机中,而不是在另一层中。但当我在唤醒结束时放置断点时,我看到剪辑包含所有mixamo动画剪辑。所以我不知道为什么会有这样的警告?这是为了避免播放剪辑。@DubiDuboni我不知道你的完整设置。对我来说,在子状态机(subMachine
)中放置状态/剪辑时,它也在工作(请参阅)。我没有收到任何警告或错误。对于此错误,这可以正常工作,但现在每当编辑器尝试在以下行的while循环中播放动画时,我都会收到警告:animator.play(randClip.name);警告是:无效的层索引“-1”所有这些mixamo动画都在子状态机中,而不是在另一层中。但当我在唤醒结束时放置断点时,我看到剪辑包含所有mixamo动画剪辑。所以我不知道为什么会有这样的警告?这是为了避免播放剪辑。@DubiDuboni我不知道你的完整设置。对我来说,在子状态机(subMachine
)中放置状态/剪辑时,它也在工作(请参阅)。我没有收到任何警告或错误。
clipsList.Shuffle();
private bool wasInitialized;
public void Init()
{
// Only start the coroutine if not initialized yet
if (!wasInitialized && clipsList.Count > 0)
{
wasInitialized = true;
StartCoroutine(PlayRandomly());
}
}