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/Avatar.cs | 73 +++++++++++++---------------------------- 1 file changed, 22 insertions(+), 51 deletions(-) (limited to 'Assets/Scripts/Avatar/Avatar.cs') diff --git a/Assets/Scripts/Avatar/Avatar.cs b/Assets/Scripts/Avatar/Avatar.cs index 928d2197..dc6c7858 100644 --- a/Assets/Scripts/Avatar/Avatar.cs +++ b/Assets/Scripts/Avatar/Avatar.cs @@ -13,8 +13,8 @@ public class Avatar : MonoBehaviour, IInteractable // 一个角色包括一个身体的collider和若干hitbox和hurtbox public PhysicsBody m_Body; public PhysicsBox m_BodyCollider; - public PhysicsBox[] m_Hitbox; - public PhysicsBox[] m_Hurtbox; + public Hitbox[] m_Hitbox; + public Hurtbox[] m_Hurtbox; protected AbilitySystem m_AbilitySystem = new AbilitySystem(); @@ -55,7 +55,7 @@ public class Avatar : MonoBehaviour, IInteractable { for (int i = 0; i < m_Hitbox.Length; ++i) { - if (PhysicsWorld.Instance.HasCollision(m_Hitbox[i])) + if (PhysicsWorld.Instance.HasCollision(m_Hitbox[i].Collider)) { return true; } @@ -67,7 +67,7 @@ public class Avatar : MonoBehaviour, IInteractable { for (int i = 0; i < m_Hitbox.Length; ++i) { - if (PhysicsWorld.Instance.HasCollision(m_Hurtbox[i])) + if (PhysicsWorld.Instance.HasCollision(m_Hurtbox[i].Collider)) { return true; } @@ -81,54 +81,9 @@ public class Avatar : MonoBehaviour, IInteractable } // 在物理模拟之后调用 - public void OnLateUpdate() + public void OnPhysicsUpdate() { - // hitbox - for(int i = 0;i < m_Hitbox.Length; ++i) - { - PhysicsBox hitbox = m_Hitbox[i]; - if (hitbox == null || !hitbox.IsActive) - continue; - for(int j = 0;j < PhysicsWorld.Instance.Collisions.Count; ++j) - { - PhysicsCollisionInfo info = PhysicsWorld.Instance.Collisions[j]; - if(info.prim1 == hitbox) - { - m_AbilitySystem.OnHit(info); - } - else if(info.prim2 == hitbox) - { - PhysicsPrimitive temp = info.prim1; - info.prim1 = info.prim2; - info.prim2 = temp; - m_AbilitySystem.OnHit(info); - } - } - } - // hurtbox - for (int i = 0; i < m_Hurtbox.Length; ++i) - { - PhysicsBox hurtbox = m_Hurtbox[i]; - if (hurtbox == null || !hurtbox.IsActive) - continue; - for (int j = 0; j < PhysicsWorld.Instance.Collisions.Count; ++j) - { - PhysicsCollisionInfo info = PhysicsWorld.Instance.Collisions[j]; - if (info.prim1 == hurtbox) - { - m_AbilitySystem.OnHurt(info); - } - else if(info.prim2 == hurtbox) - { - PhysicsPrimitive temp = info.prim1; - info.prim1 = info.prim2; - info.prim2 = temp; - m_AbilitySystem.OnHurt(info); - } - } - } - - m_AbilitySystem.OnLateUpdate(); + m_AbilitySystem.OnPhysicsUpdate(); } public virtual Vector3 GetEffectPosition() @@ -136,4 +91,20 @@ public class Avatar : MonoBehaviour, IInteractable return Vector3.zero; } + // 获得当前击打如果有的话 + public Hit GetHit() + { + return m_AbilitySystem.GetHit(); + } + + public virtual void OnHit(HitInfo hitInfo) + { + Debug.Log("Hit"); + } + + public virtual void OnHurt(HurtInfo hurtInfo) + { + Debug.Log("Hurt"); + } + } -- cgit v1.1-26-g67d0