在运行时覆盖AnimatorController

时间:2016-06-28 13:45:27

标签: unity3d

我有一个AnimatorController,并希望在运行时使用另一个剪辑覆盖它。该项目应该作为WebGL项目运行,因此不可能创建一个新的AnimatorController,因为它位于UnityEditor命名空间中,在将项目构建为WebGL项目时不会导出(如果您有解决方案,也可以发布它)。

所以我尝试使用AnimatorOverrideController,但我不知道为什么动画没有播放......

在按下播放之前默认加载Basic_Run_02,它应该被SadWalk.fbx中的剪辑覆盖。

有人知道动画没有播放的原因吗?

public class AnimationHelper : MonoBehaviour
{
public AnimationClip state;
public AnimatorOverrideController overrideController;

void Start(){

    state = Resources.Load("SadWalk", typeof(AnimationClip)) as AnimationClip;
    PlayMotion (state.name);
  }


void PlayMotion(string name){

    RuntimeAnimatorController myController = gameObject.GetComponent<Animator>().runtimeAnimatorController;
    overrideController = new AnimatorOverrideController ();
    overrideController.name = "Test";
    overrideController.runtimeAnimatorController = gameObject.GetComponent<Animator>().runtimeAnimatorController;
    overrideController ["Basic_Run_02"] = state;
    //Debug.Log (overrideController.clips.ToString);
    gameObject.GetComponent<Animator>().runtimeAnimatorController = overrideController;
    gameObject.GetComponent<Animator> ().StartPlayback ();
  }
}

1 个答案:

答案 0 :(得分:0)

UnityEngine名称空间中也提供了Animator和RuntineAnimatorController类,因此您应该进行如下更改:

gameObject.GetComponent<UnityEngine.Animator>().runtimeAnimatorController = overrideController;

并且overrideController的类型应为UnityEngine.RuntimeAnimatorController,例如:

public AnimatorOverrideController overrideController;

现在,如果您导出到WebGL,您的代码将起作用。