summaryrefslogtreecommitdiff
path: root/Erika/Assets/Scripts/Unit
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2022-06-23 07:02:16 +0800
committerchai <chaifix@163.com>2022-06-23 07:02:16 +0800
commit10d011d06c8838c91435615b577f36cc893c2f9a (patch)
treebe7be9054c05cd898de48296650ee13e6b344e56 /Erika/Assets/Scripts/Unit
parentbd7fe7bd341f6d3e929a4a9118efdd52a0da2275 (diff)
* animation
Diffstat (limited to 'Erika/Assets/Scripts/Unit')
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs16
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs8
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs39
-rw-r--r--Erika/Assets/Scripts/Unit/TransitionData.cs24
-rw-r--r--Erika/Assets/Scripts/Unit/UnitActionData.cs15
5 files changed, 63 insertions, 39 deletions
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;
+ }
+
}