diff options
10 files changed, 381 insertions, 349 deletions
diff --git a/Erika/Assets/Scripts/Test2/TestErika.cs b/Erika/Assets/Scripts/Test2/TestErika.cs index e21fe75e..3cedac1b 100644 --- a/Erika/Assets/Scripts/Test2/TestErika.cs +++ b/Erika/Assets/Scripts/Test2/TestErika.cs @@ -36,7 +36,7 @@ public class TestErika : SingletonMB<TestErika> { base.Awake(); SetupErika(); - SetupMonster(); + // SetupMonster(); UnitImageEffect.effectPlane = unitEffect; } @@ -64,9 +64,10 @@ public class TestErika : SingletonMB<TestErika> erika.unit.transform.SetParent(erika.unitController.transform); UnitController unitCtr = erika.unitController.GetOrAddComponent<UnitController>(); - unitCtr.Initialize(erika.unit, erika.unitFolder); + unitCtr.Initialize(erika.unit, erika.unitFolder); + unitCtr.unitAnimation.m_ActionData = erika.actionData; - UnitRootMotion unitRootMotion = unitCtr.unitRootMotion; + UnitRootMotion unitRootMotion = unitCtr.unitRootMotion; RootMotionProxy rootMotionProxy = erika.unit.GetOrAddComponent<RootMotionProxy>(); @@ -84,8 +85,6 @@ public class TestErika : SingletonMB<TestErika> unitCtr.pcState.ChangeState(PCState.EUnitState.Idle, new PCState.IdleParam(), true); - //////////////////////////////// - UnitManager.Instance.SetPlayerCharacter(unitCtr as PCController); } diff --git a/Erika/Assets/Scripts/Unit/AnimatorLayerInfo.cs b/Erika/Assets/Scripts/Unit/AnimatorLayerInfo.cs new file mode 100644 index 00000000..ad8d812c --- /dev/null +++ b/Erika/Assets/Scripts/Unit/AnimatorLayerInfo.cs @@ -0,0 +1,245 @@ +#define ANIM_CROSS_FADE +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +// http://unitylore.org/wiki/doku.php?id=l3y0gj + +#if UNIT_ANIMATION_LAYER // 废弃 +// 单独一层动画 +public class AnimatorLayerInfo +{ + public int layer; + + public int layerIndex { get { return (int)layer; } } + + public string name { get { return m_Animator.GetLayerName(layerIndex); } } + + public bool isBaseLayer { get { return layerIndex == 0; } } + + private Animator m_Animator; + + // 当前动作的animation data,如果是blendtree选第一个动作 + private AnimationData m_AnimationData; + public AnimationData animationData + { + get + { + AnimatorClipInfo[] clipInfos = clipsInfo; + if (clipInfos == null || clipInfos.Length == 0) + { + LogHelper.LogError(LogTag.UnitAnimation, "No current animation."); + return null; + } + var clip = clipInfos[0]; //选第一个 + string folder = m_UnitAnimation.owner.folder; + string name = clip.clip.name; + if (m_AnimationData != null && m_AnimationData.animationName == name) + return m_AnimationData; + string path = folder + "AnimationData/" + name + ".asset" ; // 要注意这里是用名字区别的,因为最终每个角色的动画都会在一个目录下面 + m_AnimationData = ResourceManager.Instance.LoadAsset<AnimationData>(path); + return m_AnimationData; + } + } + + // 当前在播放的动作 + // 如果处于transition中,认为当前状态是transition的目标状态(和Animator规则不一样) + public AnimatorStateInfo stateInfo + { + get + { + AnimatorStateInfo stateInfo = m_Animator.GetCurrentAnimatorStateInfo(layerIndex); + if (isInTransition) // 过渡中的动作认为当前动作是下一个动作 + { + stateInfo = m_Animator.GetNextAnimatorStateInfo(layerIndex); + } + return stateInfo; + } + } + + private int preStateHash = -1; + + // 当前正在播放和融合的片段信息 + public AnimatorClipInfo[] clipsInfo + { + get + { + AnimatorClipInfo[] clips = null; + if (!isInTransition) + { + clips = m_Animator.GetCurrentAnimatorClipInfo(layerIndex); + if (clips.Length == 0) + { + clips = m_Animator.GetNextAnimatorClipInfo(layerIndex); + } + } + else // 过渡中的动作认为当前动作是下一个动作 + { + clips = m_Animator.GetNextAnimatorClipInfo(layerIndex); + } + return clips; + } + } + + public AnimatorClipInfo clipInfo + { + get + { + return clipsInfo[0]; + } + } + + public int stateHash + { + get + { + return stateInfo.shortNameHash; + } + } + + // 并非准确的播放时间,只是逻辑时间,因为动画会加速减速 + public float playbackTimeInSeconds + { + get + { + return playbackNormalizedTime * clipInfo.clip.length; + } + } + + // 这个是真实世界的时间 + private float m_PlaybackRealTime; + public float playbackRealTimeInSeconds + { + get + { + return m_PlaybackRealTime; + } + } + + // 播放进度百分比,[0-1],是逻辑上的,如果动画不是loop,那么播放完后normalizedTime是1 + public float playbackNormalizedTime + { + get + { + AnimatorStateInfo state = stateInfo; + if (!state.loop && state.normalizedTime > 1) + return 1; + return state.normalizedTime % 1f; + } + } + + public float playbackSpeed + { + get + { + return m_Animator.GetFloat("PlaybackSpeed" + layerIndex); + } + set + { + float v = Mathf.Clamp(value, 0, 10); + m_Animator.SetFloat("PlaybackSpeed" + layerIndex, v); + } + } + + public float weight + { + get + { + return m_Animator.GetLayerWeight(layerIndex); + } + } + + public int nextStateHash + { + get + { + AnimatorStateInfo nextState = m_Animator.GetNextAnimatorStateInfo(layerIndex); + int hash = nextState.shortNameHash; // 如果不在过渡中,hash是0 + return hash; + } + } + + public bool isInTransition + { + get + { + return m_Animator.IsInTransition(layerIndex); + } + } + + public bool applySpeedCurve { get; set; } + + UnitAnimation m_UnitAnimation; + + Coroutine m_CalcPlaybackTimeCoroutine; + + TimelineEventProxy m_TimelineEventProxy; + + public string m_CurrentState; + + public AnimatorLayerInfo(UnitAnimation unitAnimation, Animator animator, int layer) + { + this.m_UnitAnimation = unitAnimation; + this.m_Animator = animator; + this.layer = layer; + m_CalcPlaybackTimeCoroutine = unitAnimation.StartCoroutine(CalcPlaybackRealTimeCoroutine()); + m_TimelineEventProxy = new TimelineEventProxy(unitAnimation.owner); + applySpeedCurve = true; + } + + IEnumerator CalcPlaybackRealTimeCoroutine() + { + while (true) + { + if(preStateHash != stateHash) + { + m_PlaybackRealTime = 0; + } + m_PlaybackRealTime += Time.deltaTime; + preStateHash = stateHash; + yield return null; + } + } + + public bool IsToggleOpen(EAnimationToogle toggle) + { + if (m_AnimationData == null) + return false; + return m_AnimationData.IsToggleOpen(toggle, playbackNormalizedTime); + } + + public void OnUpdate() + { + // 执行事件 + m_TimelineEventProxy.ExecuteAnimationEvents(animationData, playbackTimeInSeconds * TimelineEventProxy.FPS); + + // 播放速度控制 + if (applySpeedCurve && animationData != null && animationData.speedCurve != null) + { + playbackSpeed = animationData.speedCurve.Evaluate(playbackNormalizedTime); + } + } + + public void OnCrossFade(string animState, float normalizedTransitionDuration, float normalizedTimeOffset, float normalizedTransitionTime ) + { + m_CurrentState = animState; + m_Animator.CrossFade(animState.ToString(), normalizedTransitionDuration, layerIndex, normalizedTimeOffset, normalizedTransitionTime); + m_TimelineEventProxy.ResetPrevAnimationData(); + + playbackSpeed = 1; + } + + public void OnPlay(string animState, float normalizedTime) + { + m_CurrentState = animState; + m_Animator.Play(animState, layerIndex, normalizedTime); + m_TimelineEventProxy.ResetPrevAnimationData(); + + playbackSpeed = 1; + } +} +#endif diff --git a/Erika/Assets/Scripts/Unit/AnimatorLayerInfo.cs.meta b/Erika/Assets/Scripts/Unit/AnimatorLayerInfo.cs.meta new file mode 100644 index 00000000..314232e0 --- /dev/null +++ b/Erika/Assets/Scripts/Unit/AnimatorLayerInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c9709ec3fb4bfca4da298db828609434 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs index ee111f73..f1c60174 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs @@ -35,10 +35,6 @@ public class MonsterAnimation : UnitAnimation m_Animator.speed = 0; - m_LayerInfo = new AnimatorLayerInfo[2]; - m_LayerInfo[0] = new AnimatorLayerInfo(this, m_Animator, (int)ELayer.Basic); - //m_LayerInfo[1] = new AnimatorLayerInfo(this, m_Animator, ELayer.Attack); - if (m_Animator == null) { LogHelper.LogError("没有挂Animator组件"); @@ -50,21 +46,10 @@ public class MonsterAnimation : UnitAnimation { base.OnUpdate(); - UpdateLayer(); UpdateAnimation(); UpdateRootMotion(); } - void UpdateLayer() - { - m_LayerInfo[0].OnUpdate(); - return; - for (int i = 0; i < m_LayerInfo.Length; ++i) - { - m_LayerInfo[i].OnUpdate(); - } - } - void UpdateAnimation() { m_Animator.speed = 1; @@ -110,19 +95,13 @@ public class MonsterAnimation : UnitAnimation } private void Play(EAnimState animState, int layerIndex = 0, float normalizedTime = float.NegativeInfinity) - { - AnimatorLayerInfo layer = this.layers[layerIndex]; - if (layer == null) - return; - layer.OnPlay(animState.ToString(), normalizedTime); + {
+ base.Play(animState.ToString(), layerIndex, normalizedTime); } public void CrossFade(EAnimState 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.ToString(), normalizedTransitionDuration, normalizedTimeOffset, normalizedTransitionTime); + {
+ base.CrossFade(animState.ToString(), normalizedTransitionDuration, layerIndex, normalizedTimeOffset, normalizedTransitionTime); } } diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs index 1714a9dd..33c1b42d 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs @@ -20,17 +20,6 @@ public class PCAnimation : UnitAnimation } #endif - public enum ELayer - { - Basic = 0, - Attack, - SwordAttack, - GunAttack, - UpperBody, - LowerBody, - Count, - } - // 动作名,和animator里的state对应 public enum EAnimState @@ -64,11 +53,6 @@ public class PCAnimation : UnitAnimation LandingGround, } - private new AnimatorLayerInfo baseLayer
- {
- get { return layers[(int)ELayer.Basic]; }
- } - public bool applyRootMotion { get; set; } public bool applyRootCurve { get; set; } // 程序生成的root motion @@ -108,9 +92,9 @@ public class PCAnimation : UnitAnimation m_Animator = this.m_Owner.unitObj.GetComponent<Animator>(); - m_LayerInfo = new AnimatorLayerInfo[2]; - m_LayerInfo[0] = new AnimatorLayerInfo(this, m_Animator, (int)ELayer.Basic); - //m_LayerInfo[1] = new AnimatorLayerInfo(this, m_Animator, ELayer.Attack); + //m_LayerInfo = new AnimatorLayerInfo[2]; + //m_LayerInfo[0] = new AnimatorLayerInfo(this, m_Animator, (int)ELayer.Basic); + ////m_LayerInfo[1] = new AnimatorLayerInfo(this, m_Animator, ELayer.Attack); if (m_Animator == null) { @@ -126,22 +110,11 @@ public class PCAnimation : UnitAnimation { base.OnUpdate(); - UpdateLayer(); UpdateAnimation(); UpdateRootMotion(); UpdateRootCurve(); } - void UpdateLayer() - { - m_LayerInfo[0].OnUpdate(); - return; - //for (int i = 0; i < m_LayerInfo.Length; ++i) - //{ - // m_LayerInfo[i].OnUpdate(); - //} - } - void UpdateAnimation() {
if (!updateAnimationAuto)
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs index 593bd7b2..529cd2f5 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs @@ -4,269 +4,26 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; #if UNITY_EDITOR -using UnityEditor; +using UnityEditor;
#endif - -// http://unitylore.org/wiki/doku.php?id=l3y0gj
- -// 单独一层动画 -public class AnimatorLayerInfo -{ - public int layer; - - public int layerIndex { get { return (int)layer; } } - - public string name { get { return m_Animator.GetLayerName(layerIndex); } } - - public bool isBaseLayer { get { return layerIndex == 0; } } - - private Animator m_Animator; - - // 当前动作的animation data,如果是blendtree选第一个动作 - private AnimationData m_AnimationData; - public AnimationData animationData - { - get - { - AnimatorClipInfo[] clipInfos = clipsInfo; - if (clipInfos == null || clipInfos.Length == 0)
- {
- LogHelper.LogError(LogTag.UnitAnimation, "No current animation.");
- return null; - } - var clip = clipInfos[0]; //选第一个 - string folder = m_UnitAnimation.owner.folder; - string name = clip.clip.name; - if (m_AnimationData != null && m_AnimationData.animationName == name) - return m_AnimationData; - string path = folder + "AnimationData/" + name + ".asset" ; // 要注意这里是用名字区别的,因为最终每个角色的动画都会在一个目录下面 - m_AnimationData = ResourceManager.Instance.LoadAsset<AnimationData>(path); - return m_AnimationData; - } - } - - // 当前在播放的动作 - // 如果处于transition中,认为当前状态是transition的目标状态(和Animator规则不一样) - public AnimatorStateInfo stateInfo - { - get - { - AnimatorStateInfo stateInfo = m_Animator.GetCurrentAnimatorStateInfo(layerIndex); - if (isInTransition) // 过渡中的动作认为当前动作是下一个动作 - { - stateInfo = m_Animator.GetNextAnimatorStateInfo(layerIndex); - } - return stateInfo; - } - } - - private int preStateHash = -1; - - // 当前正在播放和融合的片段信息 - public AnimatorClipInfo[] clipsInfo - { - get - { - AnimatorClipInfo[] clips = null; - if (!isInTransition)
- {
- clips = m_Animator.GetCurrentAnimatorClipInfo(layerIndex);
- if (clips.Length == 0)
- {
- clips = m_Animator.GetNextAnimatorClipInfo(layerIndex);
- } - } - else // 过渡中的动作认为当前动作是下一个动作
- {
- clips = m_Animator.GetNextAnimatorClipInfo(layerIndex);
- } - return clips; - } - } - - public AnimatorClipInfo clipInfo
- {
- get
- {
- return clipsInfo[0];
- }
- } - - public int stateHash - { - get - { - return stateInfo.shortNameHash; - } - } - - // 并非准确的播放时间,只是逻辑时间,因为动画会加速减速 - public float playbackTimeInSeconds - { - get - { - return playbackNormalizedTime * clipInfo.clip.length; - } - } - - // 这个是真实世界的时间 - private float m_PlaybackRealTime; - public float playbackRealTimeInSeconds - { - get - { - return m_PlaybackRealTime; - } - } - - // 播放进度百分比,[0-1],是逻辑上的,如果动画不是loop,那么播放完后normalizedTime是1 - public float playbackNormalizedTime - { - get - { - AnimatorStateInfo state = stateInfo; - if (!state.loop && state.normalizedTime > 1) - return 1; - return state.normalizedTime % 1f; - } - } - - public float playbackSpeed - { - get - { - return m_Animator.GetFloat("PlaybackSpeed" + layerIndex); - } - set - { - float v = Mathf.Clamp(value, 0, 10); - m_Animator.SetFloat("PlaybackSpeed" + layerIndex, v); - } - } - - public float weight - { - get - { - return m_Animator.GetLayerWeight(layerIndex); - } - } - - public int nextStateHash - { - get - { - AnimatorStateInfo nextState = m_Animator.GetNextAnimatorStateInfo(layerIndex); - int hash = nextState.shortNameHash; // 如果不在过渡中,hash是0 - return hash; - } - } - - public bool isInTransition - { - get - { - return m_Animator.IsInTransition(layerIndex); - } - } - - public bool applySpeedCurve { get; set; } - - UnitAnimation m_UnitAnimation; - - Coroutine m_CalcPlaybackTimeCoroutine; - - TimelineEventProxy m_TimelineEventProxy; - - public string m_CurrentState; - - public AnimatorLayerInfo(UnitAnimation unitAnimation, Animator animator, int layer) - { - this.m_UnitAnimation = unitAnimation; - this.m_Animator = animator; - this.layer = layer; - m_CalcPlaybackTimeCoroutine = unitAnimation.StartCoroutine(CalcPlaybackRealTimeCoroutine()); - m_TimelineEventProxy = new TimelineEventProxy(unitAnimation.owner); - applySpeedCurve = true; - } - - IEnumerator CalcPlaybackRealTimeCoroutine() - { - while (true) - { - if(preStateHash != stateHash) - { - m_PlaybackRealTime = 0; - } - m_PlaybackRealTime += Time.deltaTime; - preStateHash = stateHash; - yield return null; - } - } - - public bool IsToggleOpen(EAnimationToogle toggle) - { - if (m_AnimationData == null) - return false; - return m_AnimationData.IsToggleOpen(toggle, playbackNormalizedTime); - } - - public void OnUpdate() - { - // 执行事件 - m_TimelineEventProxy.ExecuteAnimationEvents(animationData, playbackTimeInSeconds * TimelineEventProxy.FPS); - - // 播放速度控制 - if (applySpeedCurve && animationData != null && animationData.speedCurve != null) - { - playbackSpeed = animationData.speedCurve.Evaluate(playbackNormalizedTime); - } - } - - public void OnCrossFade(string animState, float normalizedTransitionDuration, float normalizedTimeOffset, float normalizedTransitionTime ) - { - m_CurrentState = animState;
- m_Animator.CrossFade(animState.ToString(), normalizedTransitionDuration, layerIndex, normalizedTimeOffset, normalizedTransitionTime);
- m_TimelineEventProxy.ResetPrevAnimationData();
-
- playbackSpeed = 1;
- }
-
- public void OnPlay(string animState, float normalizedTime) - { - m_CurrentState = animState; - m_Animator.Play(animState, layerIndex, normalizedTime); - m_TimelineEventProxy.ResetPrevAnimationData();
- playbackSpeed = 1;
- } -} - +/// <summary>
+/// 角色动作管理
+/// http://unitylore.org/wiki/doku.php?id=l3y0gj
+/// </summary>
[DisallowMultipleComponent] public class UnitAnimation : UnitComponent {
// 角色的所有动作数据,包括(动画、事件、RM)
- protected UnitActionData m_ActionData; - - protected AnimatorLayerInfo[] layers { get { return m_LayerInfo; } } - protected AnimatorLayerInfo[] m_LayerInfo; + public UnitActionData m_ActionData; +
+ // 当前动作,和AnimatorState不同,忽略过渡,即时切换
+ protected string m_CurrentAction = "Idle"; + public string currentAction { get { return m_CurrentAction; } } public Animator animator { get { return m_Animator; } } protected Animator m_Animator;
- protected virtual AnimatorLayerInfo baseLayer
- {
- get { return layers[0]; }
- }
-
- protected AnimatorLayerInfo layer - { - get
- {
- return baseLayer;
- } - } - public bool isInTransition { get @@ -275,62 +32,115 @@ public class UnitAnimation : UnitComponent } }
+ // 当前动作的AnimationData
public AnimationData animationData
{
get
{
- return layer.animationData;
+ return m_ActionData.GetAnimationData(currentAction);
}
}
- public AnimatorClipInfo[] clipsInfo
+ // 当前动作的动画片段
+ public AnimationClip animationClip
{
get
{
- return layer.clipsInfo;
+ if(animationData != null)
+ {
+ AnimationClip clip = ResourceManager.Instance.LoadAsset<AnimationClip>(animationData.animationPath);
+ return clip;
+ }
+ return null;
}
}
- public AnimatorClipInfo clipInfo
+ public float playbackNormalizedTime
{
get
{
- return layer.clipInfo;
+ AnimatorStateInfo state = stateInfo;
+ if (!state.loop && state.normalizedTime > 1)
+ return 1;
+ return state.normalizedTime % 1f;
}
}
- public float playbackNormalizedTime
+ public AnimatorStateInfo stateInfo
{
get
{
- return layer.playbackNormalizedTime;
+ AnimatorStateInfo stateInfo = m_Animator.GetCurrentAnimatorStateInfo(0); + if (isInTransition) // 过渡中的动作认为当前动作是下一个动作
+ { + stateInfo = m_Animator.GetNextAnimatorStateInfo(0); + } + return stateInfo;
}
}
- public AnimatorStateInfo stateInfo
+ public int stateHash
{
get
{
- return layer.stateInfo;
+ return stateInfo.shortNameHash;
}
}
- public int stateHash
+ // 并非准确的播放时间,只是逻辑时间,因为动画会加速减速
+ public float playbackTimeInSeconds
{
get
{
- return layer.stateHash;
+ 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 layer.IsToggleOpen(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>
@@ -341,10 +151,15 @@ public class UnitAnimation : UnitComponent /// <param name="normalizedTime"></param>
public void Play(string animState, int layerIndex = 0, float normalizedTime = float.NegativeInfinity) {
- AnimatorLayerInfo layer = this.layers[layerIndex];
- if (layer == null)
- return;
- layer.OnPlay(animState, normalizedTime);
+ //AnimatorLayerInfo layer = this.layers[layerIndex];
+ //if (layer == null)
+ // return;
+ //layer.OnPlay(animState, normalizedTime);
+
+ m_CurrentAction = animState;
+
+ m_Animator.Play(animState, layerIndex, normalizedTime);
+ m_TimelineEventProxy.ResetPrevAnimationData();
UnitRootMotion rm = m_Owner.GetComponent<UnitRootMotion>();
if(rm)
@@ -363,10 +178,15 @@ public class UnitAnimation : UnitComponent /// <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);
+ //AnimatorLayerInfo layer = this.layers[layerIndex];
+ //if (layer == null)
+ // return;
+ //layer.OnCrossFade(animState, normalizedTransitionDuration, normalizedTimeOffset, normalizedTransitionTime);
+
+ m_CurrentAction = animState;
+
+ m_Animator.CrossFade(animState.ToString(), normalizedTransitionDuration, layerIndex, normalizedTimeOffset, normalizedTransitionTime);
+ m_TimelineEventProxy.ResetPrevAnimationData();
UnitRootMotion rm = m_Owner.GetComponent<UnitRootMotion>();
if (rm)
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs b/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs index ff54e7a4..48ec46bb 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs @@ -34,12 +34,7 @@ public class UnitCollider : UnitComponent public ColliderInfo[] GetCurrentBoxesInfoByType(ColliderBox.EColliderType type, int layer = 0) { AnimationData animData = m_Owner.unitAnimation.animationData; - AnimatorClipInfo[] clipInfos = m_Owner.unitAnimation.clipsInfo; - //if(clipInfos == null || clipInfos.Length == 0) - //{ - // return null; - //} - float playbackTime = m_Owner.unitAnimation.playbackNormalizedTime * clipInfos[0].clip.length; + float playbackTime = m_Owner.unitAnimation.playbackNormalizedTime * m_Owner.unitAnimation.animationClip.length; //float playbackTime = layerInfo.playbackRealTimeInSeconds; ColliderInfo[] infos = animData.GetActiveCollidersInfo(type, playbackTime); return infos; diff --git a/Erika/Assets/Scripts/Unit/Components/UnitState/PCState.cs b/Erika/Assets/Scripts/Unit/Components/UnitState/PCState.cs index 98eb2f6a..c3e69830 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitState/PCState.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitState/PCState.cs @@ -140,17 +140,17 @@ public partial class PCState : UnitState {
if (Input.GetKeyDown("i"))
{
- float offset = owner.isTowardRight ? 1.5f : -1.5f;
+ //float offset = owner.isTowardRight ? 1.5f : -1.5f;
- Vector3 targetPos = TestErika.Instance.monster.owner.center + new Vector3(offset, -0.5f, 0);
- targetPos.y = Mathf.Max(1, targetPos.y);
+ //Vector3 targetPos = TestErika.Instance.monster.owner.center + new Vector3(offset, -0.5f, 0);
+ //targetPos.y = Mathf.Max(1, targetPos.y);
- UnitSnapshotInfo info = owner.TakeSnapshot();
- Vector2 dir = targetPos - owner.center;
- owner.unitLensEffect.Dash(Color.white, 0.1f, Mathf.Rad2Deg * Mathf.Atan2(dir.y, dir.x), info);
+ //UnitSnapshotInfo info = owner.TakeSnapshot();
+ //Vector2 dir = targetPos - owner.center;
+ //owner.unitLensEffect.Dash(Color.white, 0.1f, Mathf.Rad2Deg * Mathf.Atan2(dir.y, dir.x), info);
- owner.center = targetPos;
- TurnAround(!owner.isTowardRight);
+ //owner.center = targetPos;
+ //TurnAround(!owner.isTowardRight);
return true;
} return false; diff --git a/Erika/Assets/Scripts/Unit/UnitActionData.cs b/Erika/Assets/Scripts/Unit/UnitActionData.cs index 75ccee57..43643491 100644 --- a/Erika/Assets/Scripts/Unit/UnitActionData.cs +++ b/Erika/Assets/Scripts/Unit/UnitActionData.cs @@ -18,4 +18,14 @@ public class UnitActionData : ScriptableObject public TriggerAnimationDictionary actions; + public AnimationData GetAnimationData(string actionName) + { + AnimationData animData; + if(actions.TryGetValue(actionName, out animData)) + { + return animData; + } + return null; + } + } diff --git a/Erika/Assets/Scripts/Unit/UnitRootMotion.cs b/Erika/Assets/Scripts/Unit/UnitRootMotion.cs index 19e8b3b7..3acd7994 100644 --- a/Erika/Assets/Scripts/Unit/UnitRootMotion.cs +++ b/Erika/Assets/Scripts/Unit/UnitRootMotion.cs @@ -87,7 +87,7 @@ public class UnitRootMotion : UnitComponent if(overrideRootMotion)
{
var rmData = m_Owner.unitAnimation.animationData.rootMotionOverrideData;
- float frame = m_Owner.unitAnimation.playbackNormalizedTime * m_Owner.unitAnimation.clipInfo.clip.length * TimelineEventProxy.FPS;
+ float frame = m_Owner.unitAnimation.playbackNormalizedTime * m_Owner.unitAnimation.animationClip.length * TimelineEventProxy.FPS;
var animData = m_Owner.unitAnimation.animationData;
if(animData != m_PrevAnimationData)
{
|