问题
- 在运行时修改Animator控制器的动画剪辑时,Animator状态被重置。
- 第二次修改动画剪辑时出现问题。
原因
当您修改剪辑时动画会被重置。Unity需要在替换动画剪辑之前保存Animator的状态,然后在剪辑被替换之后恢复之前的状态。但是在Unity的某些版本中是没有这个特性的。(详细请参阅下文)
解决方案
有一种解决办法是,修改动画剪辑时您可以用脚本来保存和恢复Animator的状态。
void ChangeClip(AnimationClip clip ){
Animator anim = GetComponent();
AnimatorOverrideController overrideController =
new AnimatorOverrideController();
AnimatorStateInfo[] layerInfo = new AnimatorStateInfo[anim.layerCount];
for (int i = 0; i < anim.layerCount; i++)
{
layerInfo[i] = anim.GetCurrentAnimatorStateInfo(i);
}
overrideController.runtimeAnimatorController = anim.runtimeAnimatorController;
overrideController[currentClipName] = clip;
anim.runtimeAnimatorController = overrideController;
// Force an update强制更新
anim.Update(0.0f);
// Push back state 恢复之前的状态
for (int i = 0; i < anim.layerCount; i++)
{
anim.Play(layerInfo[i].nameHash, i, layerInfo[i].normalizedTime);
}
currentClipName = clip.name;
}
更多信息
请查看:http://forum.unity3d.com/threads/swapping-override-clips-at-runtime.298557/
本文适用于Unity 5.1.1f1