summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit/Component
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Unit/Component')
-rw-r--r--Assets/Scripts/Unit/Component/MonsterAnimation.cs8
-rw-r--r--Assets/Scripts/Unit/Component/MonsterState.cs40
-rw-r--r--Assets/Scripts/Unit/Component/PCAnimation.cs2
-rw-r--r--Assets/Scripts/Unit/Component/UnitCollider.cs22
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