From 07fd372981a16672af23e30816ade14fcb744804 Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 30 Aug 2021 13:49:30 +0800 Subject: =?UTF-8?q?=E5=87=BB=E4=B8=AD=E5=8F=8D=E9=A6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scripts/Unit/Component/MonsterAnimation.cs | 8 ++++- Assets/Scripts/Unit/Component/MonsterState.cs | 40 +++++++++++++++++++---- Assets/Scripts/Unit/Component/PCAnimation.cs | 2 ++ Assets/Scripts/Unit/Component/UnitCollider.cs | 22 +++++++++---- 4 files changed, 58 insertions(+), 14 deletions(-) (limited to 'Assets/Scripts/Unit/Component') diff --git a/Assets/Scripts/Unit/Component/MonsterAnimation.cs b/Assets/Scripts/Unit/Component/MonsterAnimation.cs index f536c5ef..a59443e0 100644 --- a/Assets/Scripts/Unit/Component/MonsterAnimation.cs +++ b/Assets/Scripts/Unit/Component/MonsterAnimation.cs @@ -86,9 +86,15 @@ public class MonsterAnimation : UnitAnimation m_Owner.unitRootMotion.UpdateRootMotion(); } - public void AnimIdle() { m_Animator.CrossFade("Idle", 0.2f, 0); } + + public void AnimHitLight() + { + m_Animator.Play("HitLight", 0, 0); + //m_Animator.CrossFade("HitLight", 0.05f, 0, 0, 0); + } + } diff --git a/Assets/Scripts/Unit/Component/MonsterState.cs b/Assets/Scripts/Unit/Component/MonsterState.cs index 2beba0d5..b1ff9cbd 100644 --- a/Assets/Scripts/Unit/Component/MonsterState.cs +++ b/Assets/Scripts/Unit/Component/MonsterState.cs @@ -14,6 +14,7 @@ public class MonsterState : UnitState Move, + HitLight, HitAir, HitGround, HitFall, @@ -73,23 +74,25 @@ public class MonsterState : UnitState public struct LandingParam { } + public struct HitLightParam { } + #region Idle IEnumerator Idle(IdleParam param) { - if (m_Owner.isInAir) // 浮空切换到landing - { - ChangeState(EUnitState.Landing, new LandingParam()); - } - else // idle - { + //if (m_Owner.isInAir) // 浮空切换到landing + //{ + // ChangeState(EUnitState.Landing, new LandingParam()); + //} + //else // idle + //{ m_Owner.SetYPosition(0); m_Owner.monsterAnimation.AnimIdle(); while (true) { yield return null; } - } + //} } void OnIdleExit(EUnitState nextState) @@ -97,5 +100,28 @@ public class MonsterState : UnitState } #endregion + #region HitLight + + IEnumerator HitLight(HitLightParam param) + { + m_Owner.monsterAnimation.AnimHitLight(); + yield return null; + while (true) + { + bool reachEnd = m_Owner.monsterAnimation.layers[0].playbackNomralizedTime == 1; + if(reachEnd) + { + ChangeState(EUnitState.Idle, new IdleParam()); + } + yield return null; + } + } + + void OnHitLightExit(EUnitState nextState) + { + } + + #endregion + } \ No newline at end of file diff --git a/Assets/Scripts/Unit/Component/PCAnimation.cs b/Assets/Scripts/Unit/Component/PCAnimation.cs index 878c9b7c..9c2a77ec 100644 --- a/Assets/Scripts/Unit/Component/PCAnimation.cs +++ b/Assets/Scripts/Unit/Component/PCAnimation.cs @@ -152,6 +152,7 @@ public class PCAnimation : UnitAnimation public void AnimAirAttack(int id) { + m_Owner.unitCollider.OnAnimationChange(); #if ANIM_CROSS_FADE m_Animator.CrossFade("AirAttack" + id, 0.05f); #else @@ -162,6 +163,7 @@ public class PCAnimation : UnitAnimation public void AnimAttack(int id) { + m_Owner.unitCollider.OnAnimationChange(); m_Animator.CrossFade("Attack" + id, 0.05f); } diff --git a/Assets/Scripts/Unit/Component/UnitCollider.cs b/Assets/Scripts/Unit/Component/UnitCollider.cs index 8813ccef..f3170d1b 100644 --- a/Assets/Scripts/Unit/Component/UnitCollider.cs +++ b/Assets/Scripts/Unit/Component/UnitCollider.cs @@ -50,17 +50,27 @@ public class UnitCollider : UnitComponent public void OnAnimationChange() { hitMask.Clear(); - } - public void RecordCollision() + public void RecordCollision(int colliderHash, int targetHash) { + List record; + if (!hitMask.TryGetValue(colliderHash, out record)) + { + record = new List(); + hitMask.Add(colliderHash, record); + } + record.Add(targetHash); + } - } - - public bool CanCollide() + public bool CanCollide(int colliderHash, int targetHash) { - return true; + List record; + if(!hitMask.TryGetValue(colliderHash, out record)) + { + return true; + } + return !record.Contains(targetHash); } #if UNITY_EDITOR -- cgit v1.1-26-g67d0