我正在通过For循环实例化游戏对象:
Dragon Manager脚本:
//Instantiate prefab
enemyDragons2[i] = (GameObject)Instantiate(enemyDragonStandIn,
PlaceToSpawn - Vector3.forward * 20.4f, Quaternion.identity);
//Attach script
enemyDragons2[i].AddComponent<SeekChase>();
在SeekChase脚本中,我的开头是:
static Animator anim;
在开始时,我有:
anim GetComponent<Animator>();
在Unity编辑器中,我设置了所有内容:状态机,参数,转换和条件,从一个动画播放,然后在满足条件时播放到另一个动画。
我认为每个克隆游戏对象都将附加静态Animator和动画GetComponents()部件,但是我不断收到错误消息:“克隆器对象未附加Animator,但是脚本正在尝试访问它”。这指向,(错误的位置:
anim.SetBool ("isIdol",false);
anim.SetBool ("isTurning",true);
我还试图添加到SeekChase:
**public**static Animator anim; (though it dosent seem like I should have to do this.)
在Dragon Manager脚本(实例化对象的地方)中,我尝试添加以下行:
static Animator anim; (in the Start)
和
anim = enemyDragons[i].AddComponent<Animator>();
我收到错误消息:“动画师没有播放动画控制器”
但是动画似乎并没有通过代码播放,只是默认的播放,而不是过渡到next(“ isTurning”)。看来我缺少一些简单的东西。
任何帮助将不胜感激。
谢谢。
============================================ 编辑/解决方案
开始。如果发生级别错误,Unity不应让您继续,因为它会使您对事物的功能有错误的认识。
在测试时,我使用ONE预制件(共6个)来测试动画。他们都在使用SeekChase脚本。因此,当我按Play时,我总是会收到错误消息:
"No Animator attached to the Clone game Object, but a script is trying to
access it".
我有点期望出现错误,因为其他实例化的对象正在通过SeekChase脚本访问其Animator,尽管它们没有一个。由于我正在对一个实例化的对象进行测试,并且Unity允许我“播放”,因此我认为该错误与当前动画问题的功能无关。
根据您的建议,我能够在状态机中附加过渡箭头,使两个动画从一个播放到另一个(以前没有做过)。但是,在必须设置布尔值的情况下:
if(direction.magnitude < 10.0f)
{
// Animator Stuff####
anim.SetBool("isIdol",true);
anim.SetBool("isTurning",true);...
}
..... the second animation was not being played.
然后,我考虑了持续的错误,并决定注释掉SeekChase脚本应用于其他游戏对象……然后播放第二个动画! 希望当我修复所有预制件并使其饱满时,所有的预制件都能正常工作。
再次感谢。
答案 0 :(得分:0)
首先在不通过动画进行实例化的情况下将敌人DragonStandIn作为游戏对象,然后将该游戏对象进行预制,之后,您可以使用严格的动画进行实例化,而不必在运行时添加它们。最后调用实例化的对象
anim.SetBool ("isTurning",true)