hello.
I test using AnimatorOverrideController.
there is a problem that I do not understand.
first time use animation change is good.
back to its original motion, motion is behave strange.
Please refer to the following source code and video.
please answer about my question.
Engine Ver : Unity 5.6.0p1
public class TestAnimClipOverrides : List<KeyValuePair<AnimationClip, AnimationClip>>
{
public TestAnimClipOverrides(int capacity) : base(capacity) { }
public AnimationClip this[string name]
{
get { return this.Find(x => x.Key.name.Equals(name)).Value; }
set
{
int index = this.FindIndex(x => x.Key.name.Equals(name));
if (index != -1)
this[index] = new KeyValuePair<AnimationClip, AnimationClip>(this[index].Key, value);
}
}
}
public class TestAnimator : MonoBehaviour
{
Animator m_Animator;
AnimatorOverrideController m_OverrideCtrl;
TestAnimClipOverrides m_ClipOverrides;
public AnimationClip m_Idle;
public AnimationClip m_CrouchIdle;
float m_CurrentTime = 0.0f;
bool m_IsIdleToggle = true;
void Start ()
{
m_Animator = GetComponent<Animator>();
m_OverrideCtrl = new AnimatorOverrideController(m_Animator.runtimeAnimatorController);
m_Animator.runtimeAnimatorController = m_OverrideCtrl;
m_ClipOverrides = new TestAnimClipOverrides(m_OverrideCtrl.overridesCount);
m_OverrideCtrl.GetOverrides(m_ClipOverrides);
}
void Update ()
{
m_CurrentTime += Time.deltaTime;
if (m_CurrentTime > 2.0f)
{
m_CurrentTime = 0.0f;
if (m_IsIdleToggle)
{
m_IsIdleToggle = false;
m_ClipOverrides["HumanoidIdle"] = m_CrouchIdle;
}
else
{
m_IsIdleToggle = true;
m_ClipOverrides["HumanoidIdle"] = m_Idle;
}
m_OverrideCtrl.ApplyOverrides(m_ClipOverrides);
}
}
}
[/MEDIA]