Ejemplo n.º 1
0
        //获取角色动画参数
        public AnimationControlParamter GetAnimationParamter(string animationName)
        {
            AnimationControlParamter paramter = new AnimationControlParamter();

            AnimationClip[] clips = anim.runtimeAnimatorController.animationClips;
            for (int i = 0; i < clips.Length; i++)
            {
                if (clips[i].name == animationName)
                {
                    if (clips[i].wrapMode == WrapMode.Loop)
                    {
                        paramter.bLoop = true;
                    }
                    else
                    {
                        paramter.bLoop = false;
                    }
                    break;
                }
            }

            UnityEditor.Animations.AnimatorController ac = anim.runtimeAnimatorController as UnityEditor.Animations.AnimatorController;
            //获取状态机
            UnityEditor.Animations.AnimatorStateMachine asm = ac.layers[0].stateMachine;
            for (int i = 0; i < asm.states.Length; i++)
            {
                UnityEditor.Animations.ChildAnimatorState cs = asm.states[i];
                if (cs.state.name == animationName)
                {
                    paramter.timeScale = cs.state.speed;
                    break;
                }
            }
            return(paramter);
        }
Ejemplo n.º 2
0
        //设置角色动画参数
        public void SetAnimationParamter(string animationName, AnimationControlParamter paramter)
        {
            //获取所有动画片段
            AnimationClip[] clips = anim.runtimeAnimatorController.animationClips;
            for (int i = 0; i < clips.Length; i++)
            {
                if (clips[i].name == animationName)
                {
                    if (paramter.bLoop)
                    {
                        clips[i].wrapMode = WrapMode.Loop;
                    }
                    else
                    {
                        clips[i].wrapMode = WrapMode.Default;
                    }
                }
            }

            UnityEditor.Animations.AnimatorController ac = anim.runtimeAnimatorController as UnityEditor.Animations.AnimatorController;
            //获取状态机
            UnityEditor.Animations.AnimatorStateMachine asm = ac.layers[0].stateMachine;
            for (int i = 0; i < asm.states.Length; i++)
            {
                UnityEditor.Animations.ChildAnimatorState cs = asm.states[i];
                if (cs.state.name == animationName)
                {
                    cs.state.speed = paramter.timeScale;
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Sets the animation clip as default animator state and plays it.
        /// </summary>
        /// <param name="animClip">Animation clip to play</param>
        /// <returns>true on success, false otherwise</returns>
        public bool PlayAnimationClip(AnimationClip animClip)
        {
            string animClipName = animClip != null ? animClip.name : string.Empty;

            if (playerAnimator && animClip)
            {
#if UNITY_EDITOR
                RuntimeAnimatorController animatorCtrlRT = playerAnimator.runtimeAnimatorController;

                UnityEditor.Animations.AnimatorController   animatorCtrl = animatorCtrlRT as UnityEditor.Animations.AnimatorController;
                UnityEditor.Animations.ChildAnimatorState[] animStates   = animatorCtrl.layers.Length > 0 ?
                                                                           animatorCtrl.layers[0].stateMachine.states : new UnityEditor.Animations.ChildAnimatorState[0];
                bool bStateFound = false;

                for (int i = 0; i < animStates.Length; i++)
                {
                    UnityEditor.Animations.ChildAnimatorState animState = animStates[i];

                    if (animState.state.name == animClipName)
                    {
                        animatorCtrl.layers[0].stateMachine.states[i].state.motion = animClip;
                        animatorCtrl.layers[0].stateMachine.defaultState           = animatorCtrl.layers[0].stateMachine.states[i].state;

                        bStateFound = true;
                        break;
                    }
                }

                if (!bStateFound && animatorCtrl.layers.Length > 0)
                {
                    UnityEditor.Animations.AnimatorState animState = animatorCtrl.layers[0].stateMachine.AddState(animClipName);
                    animState.motion = animClip;

                    animatorCtrl.layers[0].stateMachine.defaultState = animState;
                }
#endif
            }

            if (playerAnimator && animClipName != string.Empty)
            {
                transform.position = initialPos;
                transform.rotation = initialRot;

                playerAnimator.Play(animClipName);
                return(true);
            }

            return(false);
        }