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);
    }