From 0fdb81ffb2af8c39cfd611f485d46f3341206832 Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 9 Nov 2020 16:03:45 +0800 Subject: * HitManager --- Assets/Scripts/Avatar/Abilities/AbilityBase.cs | 6 +-- Assets/Scripts/Avatar/Abilities/AttackAbility.cs | 65 ++++++++++++------------ Assets/Scripts/Avatar/Abilities/JumpAbility.cs | 4 +- Assets/Scripts/Avatar/Abilities/UberAbility.cs | 2 +- 4 files changed, 38 insertions(+), 39 deletions(-) (limited to 'Assets/Scripts/Avatar/Abilities') diff --git a/Assets/Scripts/Avatar/Abilities/AbilityBase.cs b/Assets/Scripts/Avatar/Abilities/AbilityBase.cs index 28f0e8d6..c8c09a6b 100644 --- a/Assets/Scripts/Avatar/Abilities/AbilityBase.cs +++ b/Assets/Scripts/Avatar/Abilities/AbilityBase.cs @@ -41,7 +41,7 @@ public abstract class AbilityBase /// /// 在物理模拟之后更新 /// - public virtual void OnLateUpdate() { } + public virtual void OnPhysicsUpdate() { } /// /// 过渡到下一个ability的回调 @@ -52,12 +52,12 @@ public abstract class AbilityBase /// /// 检测到hitbox碰撞时的回调 /// - public virtual void OnHit(PhysicsCollisionInfo info) { } + public virtual void OnHit(HitInfo info) { } /// /// 检测到hurtbox碰撞时的回调 /// - public virtual void OnHurt(PhysicsCollisionInfo info) { } + public virtual void OnHurt(HurtInfo info) { } /// /// 检测到defendbox碰撞时的回调 diff --git a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs index 5a200cf8..6e7c503f 100644 --- a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs +++ b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs @@ -17,12 +17,12 @@ public class AttackAbility : AbilityBase private List m_Triggers = new List(); - private List m_LateTriggers = new List(); + private List m_PhysicsTriggers = new List(); /// - /// 这个招式产生的hit + /// 这个招式配置的hit /// - private List m_HitInfo = new List(); + private List m_Hits = new List(); /// /// 从动画结束开始计时 @@ -43,7 +43,7 @@ public class AttackAbility : AbilityBase { get { - return m_HitInfo != null ? m_HitInfo.Count : 0; + return m_Hits != null ? m_Hits.Count : 0; } } @@ -81,7 +81,7 @@ public class AttackAbility : AbilityBase m_Config.body.LocalVelocity = m_Config.velocity; } - foreach(var hit in m_HitInfo) + foreach(var hit in m_Hits) { hit.WipeRecords(); } @@ -97,30 +97,11 @@ public class AttackAbility : AbilityBase m_TimeCount = 0; } - public override void OnHit(PhysicsCollisionInfo info) + public override void OnHit(HitInfo info) { - Avatar avatar = info.prim2.GetComponentInParent(); - if (avatar == null) - return; - for (int i = 0; i < m_HitInfo.Count; ++i) - { - HitInfo hitInfo = m_HitInfo[i]; - if(!hitInfo.HasRecord(avatar)) - { - hitInfo.AddRecord(avatar); - Debug.Log("hit " + avatar.Name); - PhysicsBody body = avatar.Body; - body.SetLocalForce(new Vector3(-1000, 5000, 0)); - if(avatar is ArmorSoldierScript) - { - ArmorSoldierScript solider = avatar as ArmorSoldierScript; - solider.Hurt(); - } - } - } } - public override void OnHurt(PhysicsCollisionInfo info) + public override void OnHurt(HurtInfo info) { } @@ -143,9 +124,9 @@ public class AttackAbility : AbilityBase } // 在物理模拟之后 - public override void OnLateUpdate() + public override void OnPhysicsUpdate() { - foreach (var trigger in m_LateTriggers) + foreach (var trigger in m_PhysicsTriggers) { if (trigger.Update() && trigger.Swallow) break; @@ -159,18 +140,36 @@ public class AttackAbility : AbilityBase m_Triggers.Add(trigger); } - public void AddLateTrigger(Trigger trigger) + public void AddPhysicsTrigger(Trigger trigger) { - if (trigger == null || m_LateTriggers.Contains(trigger)) + if (trigger == null || m_PhysicsTriggers.Contains(trigger)) return; - m_LateTriggers.Add(trigger); + m_PhysicsTriggers.Add(trigger); } public void AddHitDefination(HitDefination defination) { - HitInfo info = new HitInfo(); + Hit info = new Hit(); info.defination = defination; - m_HitInfo.Add(info); + m_Hits.Add(info); + } + + // 获得当前时间点产生的hit + public Hit GetHit() + { + AnimatorStateInfo info = m_Config.animator.GetCurrentAnimatorStateInfo(0); + float normalizeTime = info.normalizedTime; + for (int i = 0; i< m_Hits.Count; ++i) + { + Hit hit = m_Hits[i]; + float start = hit.defination.start; + float end = hit.defination.end; + if(normalizeTime >= start && normalizeTime <= end) + { + return hit; + } + } + return null; } } diff --git a/Assets/Scripts/Avatar/Abilities/JumpAbility.cs b/Assets/Scripts/Avatar/Abilities/JumpAbility.cs index b83e8cfb..5c2d6366 100644 --- a/Assets/Scripts/Avatar/Abilities/JumpAbility.cs +++ b/Assets/Scripts/Avatar/Abilities/JumpAbility.cs @@ -208,9 +208,9 @@ public class JumpAbility : AbilityBase } } - public override void OnLateUpdate() + public override void OnPhysicsUpdate() { - base.OnLateUpdate(); + base.OnPhysicsUpdate(); } /// diff --git a/Assets/Scripts/Avatar/Abilities/UberAbility.cs b/Assets/Scripts/Avatar/Abilities/UberAbility.cs index 0a5bb8c5..ca2e7c06 100644 --- a/Assets/Scripts/Avatar/Abilities/UberAbility.cs +++ b/Assets/Scripts/Avatar/Abilities/UberAbility.cs @@ -7,6 +7,6 @@ public abstract class UberAbility : AbilityBase { public abstract void OnUpdate(); - public abstract void OnLateUpdate(); + public abstract void OnPhysicsUpdate(); } -- cgit v1.1-26-g67d0