summaryrefslogtreecommitdiff
path: root/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2022-06-24 18:12:58 +0800
committerchai <chaifix@163.com>2022-06-24 18:12:58 +0800
commita80a8a8f4a9259cd970fcdbb25a634d55cb4da4e (patch)
treec9cf7b4b1881fffb620ef0798dec1020c39ef9b5 /Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs
parent64482ae0fb8cb756469b98620e8fbd166f5f5de0 (diff)
*Unit Animation -> Unit Action
Diffstat (limited to 'Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs')
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs222
1 files changed, 0 insertions, 222 deletions
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs
deleted file mode 100644
index 45276edc..00000000
--- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs
+++ /dev/null
@@ -1,222 +0,0 @@
-#define ANIM_CROSS_FADE
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-#if UNITY_EDITOR
-using UnityEditor;
-#endif
-
-/// <summary>
-/// 角色动作管理
-/// http://unitylore.org/wiki/doku.php?id=l3y0gj
-/// </summary>
-[DisallowMultipleComponent]
-public class UnitAnimation : UnitComponent
-{
- // 角色的所有动作数据,包括(动画、事件、RM)
- public UnitActionData m_ActionData;
-
- // 当前动作,和AnimatorState不同,忽略过渡,即时切换
- protected string m_CurrentAction = "Idle";
- public string currentAction
- {
- get
- {
- return m_CurrentAction;
- }
- set
- {
- m_CurrentAction = value;
- m_Dirty = true;
- }
- }
-
- private bool m_Dirty = true;
-
- public Animator animator { get { return m_Animator; } }
- protected Animator m_Animator;
-
- public bool isInTransition
- {
- get
- {
- return m_Animator.IsInTransition(0);
- }
- }
-
- // 当前动作的AnimationData
- private AnimationData m_CachedAnimationData;
- public AnimationData animationData
- {
- get
- {
- if (m_Dirty)
- {
- m_CachedAnimationData = m_ActionData.GetAnimationData(currentAction);
- m_Dirty = false;
- }
- return m_CachedAnimationData;
- }
- }
-
- // 当前动作的动画片段
- public AnimationClip animationClip
- {
- get
- {
- if(animationData != null)
- {
- AnimationClip clip = ResourceManager.Instance.LoadAsset<AnimationClip>(animationData.animationPath);
- return clip;
- }
- return null;
- }
- }
-
- public float playbackNormalizedTime
- {
- get
- {
- AnimatorStateInfo state = stateInfo;
- if (!state.loop && state.normalizedTime > 1)
- return 1;
- return state.normalizedTime % 1f;
- }
- }
-
- public AnimatorStateInfo stateInfo
- {
- get
- {
- AnimatorStateInfo stateInfo = m_Animator.GetCurrentAnimatorStateInfo(0);
- if (isInTransition) // 过渡中的动作认为当前动作是下一个动作
- {
- stateInfo = m_Animator.GetNextAnimatorStateInfo(0);
- }
- return stateInfo;
- }
- }
-
- public int stateHash
- {
- get
- {
- return stateInfo.shortNameHash;
- }
- }
-
- // 并非准确的播放时间,只是逻辑时间,因为动画会加速减速
- public float playbackTimeInSeconds
- {
- get
- {
- return playbackNormalizedTime * animationClip.length;
- }
- }
-
- TimelineEventProxy m_TimelineEventProxy;
-
- public float playbackSpeed
- {
- get
- {
- return m_Animator.GetFloat("PlaybackSpeed" + 0);
- }
- set
- {
- float v = Mathf.Clamp(value, 0, 10);
- m_Animator.SetFloat("PlaybackSpeed" + 0, v);
- }
- }
-
- public override void OnUpdate()
- {
- base.OnUpdate();
- // 执行事件
- m_TimelineEventProxy.ExecuteAnimationEvents(animationData, playbackTimeInSeconds * TimelineEventProxy.FPS);
-
- // 播放速度控制
- if (/*applySpeedCurve && */animationData != null && animationData.speedCurve != null)
- {
- playbackSpeed = animationData.speedCurve.Evaluate(playbackNormalizedTime);
- }
- }
-
- public bool IsToggleOpen(EAnimationToogle toggle)
- {
- return animationData.IsToggleOpen(toggle, playbackNormalizedTime);
- }
-
- public override void Initialize()
- {
- base.Initialize();
-
- }
-
- public override void OnPostInitialize()
- {
- base.OnPostInitialize();
-
- m_TimelineEventProxy = new TimelineEventProxy(this.owner);
- playbackSpeed = 1f;
- }
-
- /// <summary>
- /// 直接播放动作
- /// </summary>
- /// <param name="animState"></param>
- /// <param name="layerIndex"></param>
- /// <param name="normalizedTime"></param>
- public void Play(string targetAction, float normalizedTime = float.NegativeInfinity)
- {
- currentAction = targetAction;
-
- m_Animator.Play(targetAction, 0, normalizedTime);
- m_TimelineEventProxy.ResetPrevAnimationData();
-
- UnitRootMotion rm = m_Owner.GetComponent<UnitRootMotion>();
- if(rm)
- {
- rm.OnAnimationChange();
- }
- }
-
- /// <summary>
- /// CrossFade
- /// </summary>
- /// <param name="animState"></param>
- /// <param name="normalizedTransitionDuration"></param>
- /// <param name="layerIndex"></param>
- /// <param name="normalizedTimeOffset"></param>
- /// <param name="normalizedTransitionTime"></param>
- public void CrossFade(string targetAction, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f)
- {
- TransitionData transition = m_ActionData.GetTransitionData(currentAction, targetAction);
- if(transition != null)
- {
- if(transition.type == TransitionData.TransitionType.NormalizedTime)
- {
- m_Animator.CrossFade(targetAction, transition.duration, 0, normalizedTimeOffset, normalizedTransitionTime);
- }
- else if(transition.type == TransitionData.TransitionType.FixedTime)
- {
- m_Animator.CrossFadeInFixedTime(targetAction, transition.duration, 0, normalizedTimeOffset, normalizedTransitionTime);
- }
- }
- else
- {
- m_Animator.CrossFade(targetAction, normalizedTransitionDuration, 0, normalizedTimeOffset, normalizedTransitionTime);
- }
- currentAction = targetAction;
-
- m_TimelineEventProxy.ResetPrevAnimationData();
-
- UnitRootMotion rm = m_Owner.GetComponent<UnitRootMotion>();
- if (rm)
- {
- rm.OnAnimationChange();
- }
- }
-
-}