diff options
Diffstat (limited to 'Assets/Scripts/Unit/Component')
-rw-r--r-- | Assets/Scripts/Unit/Component/MonsterAnimation.cs | 8 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Component/MonsterState.cs | 40 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Component/PCAnimation.cs | 2 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Component/UnitCollider.cs | 22 |
4 files changed, 58 insertions, 14 deletions
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<int> record;
+ if (!hitMask.TryGetValue(colliderHash, out record))
+ {
+ record = new List<int>();
+ hitMask.Add(colliderHash, record);
+ }
+ record.Add(targetHash);
+ }
- }
-
- public bool CanCollide()
+ public bool CanCollide(int colliderHash, int targetHash)
{
- return true;
+ List<int> record;
+ if(!hitMask.TryGetValue(colliderHash, out record))
+ {
+ return true;
+ }
+ return !record.Contains(targetHash);
}
#if UNITY_EDITOR
|