diff options
6 files changed, 73 insertions, 39 deletions
diff --git a/Erika/Assets/Bundle/Unit/PC/Erika/ActionData/ErikaActionData.asset b/Erika/Assets/Bundle/Unit/PC/Erika/ActionData/ErikaActionData.asset index 2e3fdcaa..e46a4ebe 100644 --- a/Erika/Assets/Bundle/Unit/PC/Erika/ActionData/ErikaActionData.asset +++ b/Erika/Assets/Bundle/Unit/PC/Erika/ActionData/ErikaActionData.asset @@ -48,3 +48,13 @@ MonoBehaviour: - {fileID: 11400000, guid: 1c1857d54bd8c4b4092b7ac82f16a21f, type: 2} - {fileID: 11400000, guid: 1c1857d54bd8c4b4092b7ac82f16a21f, type: 2} - {fileID: 11400000, guid: ec8e24c834bbf4e4b8d2b4303c7cbe79, type: 2} + defaultTransitionNormalizedTime: 0.02 + transitions: + - transition: Idle->Move + enabled: 1 + type: 1 + duration: 0.01 + - transition: Move->Idle + enabled: 1 + type: 1 + duration: 1 diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs index f1c60174..9c9ba8e3 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs @@ -69,24 +69,24 @@ public class MonsterAnimation : UnitAnimation public void AnimHitLight() { - this.Play(EAnimState.HitLight, 0, 0); + this.Play(EAnimState.HitLight, 0); //m_Animator.CrossFade("HitLight", 0.05f, 0, 0, 0); } public void AnimHitAir() { - this.Play(EAnimState.HitAir, 0, 0); + this.Play(EAnimState.HitAir, 0); //m_Animator.CrossFade("HitLight", 0.05f, 0, 0, 0); } public void AnimHitInAir()
{
- this.Play(EAnimState.HitInAir, 0, 0); + this.Play(EAnimState.HitInAir, 0); } public void AnimHitBackHeavy()
{
- this.Play(EAnimState.HitBackHeavy, 0, 0); + this.Play(EAnimState.HitBackHeavy, 0); } public void AnimRise() @@ -94,14 +94,14 @@ public class MonsterAnimation : UnitAnimation this.CrossFade(EAnimState.Rise, 0); } - private void Play(EAnimState animState, int layerIndex = 0, float normalizedTime = float.NegativeInfinity) + private void Play(EAnimState animState, float normalizedTime = float.NegativeInfinity) {
- base.Play(animState.ToString(), layerIndex, normalizedTime); + base.Play(animState.ToString(), normalizedTime); } - public void CrossFade(EAnimState animState, float normalizedTransitionDuration, int layerIndex = 0, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) + public void CrossFade(EAnimState animState, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) {
- base.CrossFade(animState.ToString(), normalizedTransitionDuration, layerIndex, normalizedTimeOffset, normalizedTransitionTime); + base.CrossFade(animState.ToString(), normalizedTransitionDuration, normalizedTimeOffset, normalizedTransitionTime); } } diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs index 33c1b42d..fa0f58fa 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs @@ -230,14 +230,14 @@ public class PCAnimation : UnitAnimation CrossFade(EAnimState.LandingGround, 0.00f); } - private void Play(EAnimState animState, float normalizedTime = float.NegativeInfinity, int layerIndex = 0) + private void Play(EAnimState animState, float normalizedTime = float.NegativeInfinity) { - base.Play(animState.ToString(), layerIndex, normalizedTime); + base.Play(animState.ToString(), normalizedTime); } - private void CrossFade(EAnimState animState, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f, int layerIndex = 0) + private void CrossFade(EAnimState animState, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) { - base.CrossFade(animState.ToString(), normalizedTransitionDuration, layerIndex, normalizedTimeOffset, normalizedTransitionTime); + base.CrossFade(animState.ToString(), normalizedTransitionDuration, normalizedTimeOffset, normalizedTransitionTime); } } diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs index 529cd2f5..ac416acb 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs @@ -149,16 +149,11 @@ public class UnitAnimation : UnitComponent /// <param name="animState"></param>
/// <param name="layerIndex"></param>
/// <param name="normalizedTime"></param>
- public void Play(string animState, int layerIndex = 0, float normalizedTime = float.NegativeInfinity) + public void Play(string targetAction, float normalizedTime = float.NegativeInfinity) {
- //AnimatorLayerInfo layer = this.layers[layerIndex];
- //if (layer == null)
- // return;
- //layer.OnPlay(animState, normalizedTime);
+ m_CurrentAction = targetAction;
- m_CurrentAction = animState;
-
- m_Animator.Play(animState, layerIndex, normalizedTime);
+ m_Animator.Play(targetAction, 0, normalizedTime);
m_TimelineEventProxy.ResetPrevAnimationData();
UnitRootMotion rm = m_Owner.GetComponent<UnitRootMotion>();
@@ -176,16 +171,26 @@ public class UnitAnimation : UnitComponent /// <param name="layerIndex"></param>
/// <param name="normalizedTimeOffset"></param>
/// <param name="normalizedTransitionTime"></param>
- public void CrossFade(string animState, float normalizedTransitionDuration, int layerIndex = 0, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f)
- {
- //AnimatorLayerInfo layer = this.layers[layerIndex];
- //if (layer == null)
- // return;
- //layer.OnCrossFade(animState, normalizedTransitionDuration, normalizedTimeOffset, normalizedTransitionTime);
-
- m_CurrentAction = animState;
+ public void CrossFade(string targetAction, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f)
+ {
+ TransitionData transition = m_ActionData.GetTransitionData(m_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);
+ }
+ m_CurrentAction = targetAction;
- m_Animator.CrossFade(animState.ToString(), normalizedTransitionDuration, layerIndex, normalizedTimeOffset, normalizedTransitionTime);
m_TimelineEventProxy.ResetPrevAnimationData();
UnitRootMotion rm = m_Owner.GetComponent<UnitRootMotion>();
diff --git a/Erika/Assets/Scripts/Unit/TransitionData.cs b/Erika/Assets/Scripts/Unit/TransitionData.cs index 27333b54..53606c35 100644 --- a/Erika/Assets/Scripts/Unit/TransitionData.cs +++ b/Erika/Assets/Scripts/Unit/TransitionData.cs @@ -1,26 +1,32 @@ -using System.Collections;
+using System;
+using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 动画过渡间隔配置
/// </summary>
+[Serializable]
public class TransitionData
{
- // 起始动画
- public string fromAnimation;
- // 结束动画
- public string toAnimation;
+ // A->B
+ public string transition;
+ //// 起始动画
+ //public string fromAnimation;
+ //// 结束动画
+ //public string toAnimation;
+
+ public bool enabled = true;
public enum TransitionType
{
- FixedTime, // 固定时间(秒)
- NormalizedTime, // 归一化时间
+ FixedTime, // 固定时间(秒)
+ NormalizedTime, // 归一化时间
PoseDifference, // 对比前后pose的差异
}
- public float duration; // FixedTime 或 NormalizedTime
+ public TransitionType type;
-
+ public float duration; // FixedTime 或 NormalizedTime
}
diff --git a/Erika/Assets/Scripts/Unit/UnitActionData.cs b/Erika/Assets/Scripts/Unit/UnitActionData.cs index 43643491..92ad68f7 100644 --- a/Erika/Assets/Scripts/Unit/UnitActionData.cs +++ b/Erika/Assets/Scripts/Unit/UnitActionData.cs @@ -16,7 +16,14 @@ public class UnitActionData : ScriptableObject [Tooltip("所参照的AnimatorController")] public RuntimeAnimatorController referenceController; - public TriggerAnimationDictionary actions; + [Tooltip("所有动作和对应的动画片段")] + public TriggerAnimationDictionary actions; + + [Tooltip("默认过渡时间")] + public float defaultTransitionNormalizedTime = 0.02f; + + [Tooltip("设置动作间过渡时间")] + public List<TransitionData> transitions; public AnimationData GetAnimationData(string actionName) { @@ -28,4 +35,10 @@ public class UnitActionData : ScriptableObject return null; } + public TransitionData GetTransitionData(string from, string to) + { + var transition = transitions.Find(t => t.transition == from + "->" + to && t.enabled); + return transition; + } + } |