将动画师附加到克隆GameObject

时间:2018-06-22 07:00:20

标签: c# animation unity3d

我正在通过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脚本应用于其他游戏对象……然后播放第二个动画! 希望当我修复所有预制件并使其饱满时,所有的预制件都能正常工作。

再次感谢。

1 个答案:

答案 0 :(得分:0)

首先在不通过动画进行实例化的情况下将敌人DragonStandIn作为游戏对象,然后将该游戏对象进行预制,之后,您可以使用严格的动画进行实例化,而不必在运行时添加它们。最后调用实例化的对象

     anim.SetBool ("isTurning",true)