一、AnimatorOverrideController是什么?
AnimatorOverrideController相当于一个虚拟的AnimatorController,用于重写(即在代码中编辑)AnimatorController
二、使用AnimatorOverrideController好处
普通的AnimatorController需要在运行前设置好clip,在运行时无法修改,而AnimatorOverrideController可以在运行时随意修改替换当前的clip。这样当为某个游戏物体添加Animator组件时,不需要每个物体都设置一个特定的AnimatorController,只需要一个AnimatorOverrideController就可以代替所有的AnimatorController,非常方便。
三、如何创建AnimatorOverrideController
首先创建一个通用的AnimatorController,创建完后拖拽进Animator组件。
其中需要先放置 两个/两个以上的空Clip,用于替换。
(以下会说明原因)
四、如何使用AnimatorOverrideController来替换Clip
官方写法:
1.创建AnimatorOverrideController
protected Animator animator;
protected AnimatorOverrideController animatorOverrideController;
public void Start()
{
animator = gameobject.GetComponent<Animator>();
//创建新的AnimatorOverrideController并赋值给runtimeAnimatorController
animatorOverrideController = new AnimatorOverrideController(animator.runtimeAnimatorController);
animator.runtimeAnimatorController = animatorOverrideController;//必须有这一步
}
2.替换clip
public void SetClip(AnimationClip clip)
{
string key = $"Clip_AAA";//这里的key是指原AnimatorOverrideController或/AnimatorController中的状态名
animatorOverrideController [key] = clip;//将新的clip赋值给animatorOverrideController某个状态
animator.Play(key);//播放该片段
}
这里拿的官方图片,状态机里的Grounded、Die、Falling等都是我上面定义的Key,可以理解一下
注:因为Animator创建后会自动播放默认Clip,所以设置两个或以上的Clip。如上图默认状态为Grounded,因此替换的Clip可以放在处Grounded中,再通过animator.Play(key)
方法播放替换的片段。