private void _SetCurrPlayAction(Animator refModelAnimator, SpeEditorAction action) { RuntimeAnimatorController finalController = null; if (action == null) { if (refModeAnimOverrideController["RefModelEmptyAnim"] != nullClip) { _ResetAnimatorOverrideController(); refModeAnimOverrideController["RefModelEmptyAnim"] = nullClip; } finalController = refModeAnimOverrideController; //应用记录的初始姿态 _ApplyDefaultBindPose(refModelAnimator.gameObject); } else { if (refModeAnimOverrideController["RefModelEmptyAnim"] != action.AnimClip) { _ResetAnimatorOverrideController(); refModeAnimOverrideController["RefModelEmptyAnim"] = action.AnimClip; } finalController = refModeAnimOverrideController; } refModelAnimator.runtimeAnimatorController = finalController; //初始化播放状态 { refModelAnimator.speed = 0f; refModelAnimator.Play("RefModelAnim", 0, 0f); refModelAnimator.Update(0.0f); } }
private SpeEditorAction _FindOutCurrAction(float t, ref float localTime) { float curr = 0.0f; localTime = 0.0f; SpeEditorAction findAction = null; foreach (var a in actions) { if (t >= curr && t < curr + a.Length) { findAction = a; localTime = t - curr; break; } curr += a.Length; //如果超时则定位到最后一个动作 findAction = a; localTime = a.Length; } return(findAction); }
public void SetCurrPlayTime(GameObject refModel, float t) { Animator refModelAnimator = refModel.GetComponent <Animator>(); //若当前模型没有Animator直接返回 if (refModelAnimator == null) { return; } float localPlayTime = 0.0f; //根据设置时间查找当前该播动画 SpeEditorAction currPlayAction = _FindOutCurrAction(t, ref localPlayTime); //装载当前应该播放的动画 _SetCurrPlayAction(refModelAnimator, currPlayAction); if (currPlayAction != null) { //设置当前动作播放时间 _SetCurrPlayActionTime(refModelAnimator, localPlayTime); } }
public void AddAction(AnimationClip clip) { SpeEditorAction newAction = new SpeEditorAction(clip); actions.Add(newAction); }