summaryrefslogtreecommitdiff
path: root/Assets/Scripts
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts')
-rw-r--r--Assets/Scripts/ApplicationMain.cs27
-rw-r--r--Assets/Scripts/Avatar/Abilities/AbilityBase.cs6
-rw-r--r--Assets/Scripts/Avatar/Abilities/AttackAbility.cs65
-rw-r--r--Assets/Scripts/Avatar/Abilities/JumpAbility.cs4
-rw-r--r--Assets/Scripts/Avatar/Abilities/UberAbility.cs2
-rw-r--r--Assets/Scripts/Avatar/AbilitySystem.cs30
-rw-r--r--Assets/Scripts/Avatar/Avatar.cs73
-rw-r--r--Assets/Scripts/Avatar/HitInfo.cs19
-rw-r--r--Assets/Scripts/Avatar/Hitbox.cs33
-rw-r--r--Assets/Scripts/Avatar/Hitbox.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Hurtbox.cs33
-rw-r--r--Assets/Scripts/Avatar/Hurtbox.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/IInteractable.cs6
-rw-r--r--Assets/Scripts/Managers/AvatarManager.cs4
-rw-r--r--Assets/Scripts/Managers/HitManager.cs121
-rw-r--r--Assets/Scripts/Managers/HitManager.cs.meta11
-rw-r--r--Assets/Scripts/Physics/PhysicsWorld.cs16
-rw-r--r--Assets/Scripts/Props.meta8
-rw-r--r--Assets/Scripts/Scene.meta8
-rw-r--r--Assets/Scripts/Test/ArmorSoldierScript.cs7
-rw-r--r--Assets/Scripts/Test/SaionjiScript.cs10
-rw-r--r--Assets/Scripts/Test/SaionjiUberAbility.cs2
22 files changed, 374 insertions, 133 deletions
diff --git a/Assets/Scripts/ApplicationMain.cs b/Assets/Scripts/ApplicationMain.cs
index 81ac453c..2c310e9b 100644
--- a/Assets/Scripts/ApplicationMain.cs
+++ b/Assets/Scripts/ApplicationMain.cs
@@ -4,30 +4,37 @@ using UnityEngine;
public class ApplicationMain : MonoBehaviour
{
- // Start is called before the first frame update
void Start()
{
InputManager.Instance.Init();
- PhysicsWorld.Instance.Init();
+ PhysicsWorld.Instance.Init();
+
+ PhysicsWorld.Instance.onUpdate += OnPhysicsUpdate;
+ PhysicsWorld.Instance.onAfterUpdate += OnAfterPhysicsUpdate;
}
- // Update is called once per frame
void Update()
{
InputManager.Instance.Update();
AvatarManager.Instance.OnUpdate();
+
+ PhysicsWorld.Instance.Update();
}
- private void LateUpdate()
+ void OnPhysicsUpdate()
{
- PhysicsWorld.Instance.Update();
- AvatarManager.Instance.OnLateUpdate();
- }
-
- private void OnDrawGizmos()
+ HitManager.Instance.OnPhysicsUpdate();
+ AvatarManager.Instance.OnPhysicsUpdate();
+ }
+
+ void OnAfterPhysicsUpdate()
+ {
+
+ }
+
+ private void OnDrawGizmos()
{
PhysicsWorld.Instance.DrawGizmos();
}
-
} \ No newline at end of file
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
/// <summary>
/// 在物理模拟之后更新
/// </summary>
- public virtual void OnLateUpdate() { }
+ public virtual void OnPhysicsUpdate() { }
/// <summary>
/// 过渡到下一个ability的回调
@@ -52,12 +52,12 @@ public abstract class AbilityBase
/// <summary>
/// 检测到hitbox碰撞时的回调
/// </summary>
- public virtual void OnHit(PhysicsCollisionInfo info) { }
+ public virtual void OnHit(HitInfo info) { }
/// <summary>
/// 检测到hurtbox碰撞时的回调
/// </summary>
- public virtual void OnHurt(PhysicsCollisionInfo info) { }
+ public virtual void OnHurt(HurtInfo info) { }
/// <summary>
/// 检测到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<Trigger> m_Triggers = new List<Trigger>();
- private List<Trigger> m_LateTriggers = new List<Trigger>();
+ private List<Trigger> m_PhysicsTriggers = new List<Trigger>();
/// <summary>
- /// 这个招式产生的hit
+ /// 这个招式配置的hit
/// </summary>
- private List<HitInfo> m_HitInfo = new List<HitInfo>();
+ private List<Hit> m_Hits = new List<Hit>();
/// <summary>
/// 从动画结束开始计时
@@ -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<Avatar>();
- 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();
}
/// <summary>
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();
}
diff --git a/Assets/Scripts/Avatar/AbilitySystem.cs b/Assets/Scripts/Avatar/AbilitySystem.cs
index 3e2ab838..9d289884 100644
--- a/Assets/Scripts/Avatar/AbilitySystem.cs
+++ b/Assets/Scripts/Avatar/AbilitySystem.cs
@@ -62,31 +62,26 @@ public class AbilitySystem
}
}
- public void OnLateUpdate()
+ public void OnPhysicsUpdate()
{
if(m_Currrent != null)
{
- m_Currrent.OnLateUpdate();
+ m_Currrent.OnPhysicsUpdate();
}
if(m_UberAbility != null)
{
- m_UberAbility.OnLateUpdate();
+ m_UberAbility.OnPhysicsUpdate();
}
}
- public void OnHit(PhysicsCollisionInfo info)
+ public void OnHit(HitInfo info)
{
- if(m_Currrent != null)
- {
- m_Currrent.OnHit(info);
- }
+
}
- public void OnHurt(PhysicsCollisionInfo info)
+
+ public void OnHurt(HurtInfo info)
{
- if (m_Currrent != null)
- {
- m_Currrent.OnHurt(info);
- }
+
}
public void SwitchToAbility(AbilityBase targetAbility)
@@ -97,4 +92,13 @@ public class AbilitySystem
m_Currrent.OnEnter();
}
+ // 获得当前击打如果有的话
+ public Hit GetHit()
+ {
+ if (Current == null || !(Current is AttackAbility))
+ return null;
+ AttackAbility ability = Current as AttackAbility;
+ return ability.GetHit();
+ }
+
} \ No newline at end of file
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");
+ }
+
}
diff --git a/Assets/Scripts/Avatar/HitInfo.cs b/Assets/Scripts/Avatar/HitInfo.cs
index 8d24f6ee..aef9a03f 100644
--- a/Assets/Scripts/Avatar/HitInfo.cs
+++ b/Assets/Scripts/Avatar/HitInfo.cs
@@ -2,19 +2,22 @@
using System.Collections.Generic;
using UnityEngine;
-public class HitInfo
+/// <summary>
+/// 每个招式配置的单个hit数据
+/// </summary>
+public class Hit
{
public HitDefination defination;
/// <summary>
- /// 记录这个hit命中的avatar
+ /// 记录这个hit命中的avatar,避免连续击中
/// </summary>
- private List<Avatar> m_HitAvatars = new List<Avatar>();
+ private List<IInteractable> m_HitAvatars = new List<IInteractable>();
- public void AddRecord(Avatar avatar)
+ public void AddRecord(IInteractable interactable)
{
- if (!m_HitAvatars.Contains(avatar))
- m_HitAvatars.Add(avatar);
+ if (!m_HitAvatars.Contains(interactable))
+ m_HitAvatars.Add(interactable);
}
// 招式结束后,清除记录的avatar
@@ -23,9 +26,9 @@ public class HitInfo
m_HitAvatars.Clear();
}
- public bool HasRecord(Avatar avatar)
+ public bool HasRecord(IInteractable interactable)
{
- return m_HitAvatars.Contains(avatar);
+ return m_HitAvatars.Contains(interactable);
}
}
diff --git a/Assets/Scripts/Avatar/Hitbox.cs b/Assets/Scripts/Avatar/Hitbox.cs
new file mode 100644
index 00000000..5fd0cecf
--- /dev/null
+++ b/Assets/Scripts/Avatar/Hitbox.cs
@@ -0,0 +1,33 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class Hitbox : MonoBehaviour
+{
+ [SerializeField]
+ private PhysicsBox m_BoxCollider;
+ public PhysicsBox Collider
+ {
+ get
+ {
+ return m_BoxCollider;
+ }
+ }
+
+ [SerializeField]
+ private MonoBehaviour m_Host ;
+
+ public IInteractable Host
+ {
+ get
+ {
+ return m_Host as IInteractable;
+ }
+ }
+
+ private void Awake()
+ {
+ HitManager.Instance.AddHitBox(this);
+ }
+
+}
diff --git a/Assets/Scripts/Avatar/Hitbox.cs.meta b/Assets/Scripts/Avatar/Hitbox.cs.meta
new file mode 100644
index 00000000..19075d69
--- /dev/null
+++ b/Assets/Scripts/Avatar/Hitbox.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f763a2db7c267714f824ca6a69bec569
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Hurtbox.cs b/Assets/Scripts/Avatar/Hurtbox.cs
new file mode 100644
index 00000000..b5bd738f
--- /dev/null
+++ b/Assets/Scripts/Avatar/Hurtbox.cs
@@ -0,0 +1,33 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class Hurtbox : MonoBehaviour
+{
+ [SerializeField]
+ private PhysicsBox m_BoxCollider;
+ public PhysicsBox Collider
+ {
+ get {
+ return m_BoxCollider;
+ }
+ }
+
+ [SerializeField]
+ private MonoBehaviour m_Host;
+
+ public IInteractable Host
+ {
+ get
+ {
+ return m_Host as IInteractable;
+ }
+ }
+
+ private void Awake()
+ {
+ HitManager.Instance.AddHurtBox(this);
+ }
+
+
+}
diff --git a/Assets/Scripts/Avatar/Hurtbox.cs.meta b/Assets/Scripts/Avatar/Hurtbox.cs.meta
new file mode 100644
index 00000000..f0c2e2ff
--- /dev/null
+++ b/Assets/Scripts/Avatar/Hurtbox.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 154a74587976e25469eae9a4a8c7762b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/IInteractable.cs b/Assets/Scripts/Avatar/IInteractable.cs
index 23e49912..7a648c6c 100644
--- a/Assets/Scripts/Avatar/IInteractable.cs
+++ b/Assets/Scripts/Avatar/IInteractable.cs
@@ -14,8 +14,10 @@ public interface IInteractable
bool IsHit();
- bool IsHurt();
-
+ bool IsHurt();
+
+ void OnHit(HitInfo hitInfo);
+ void OnHurt(HurtInfo hurtInfo);
}
diff --git a/Assets/Scripts/Managers/AvatarManager.cs b/Assets/Scripts/Managers/AvatarManager.cs
index 4cb3cb7f..6ccac62a 100644
--- a/Assets/Scripts/Managers/AvatarManager.cs
+++ b/Assets/Scripts/Managers/AvatarManager.cs
@@ -19,11 +19,11 @@ public class AvatarManager : Singleton<AvatarManager>
}
}
- public void OnLateUpdate()
+ public void OnPhysicsUpdate()
{
foreach(var avatar in m_Avatars)
{
- avatar.OnLateUpdate();
+ avatar.OnPhysicsUpdate();
}
}
diff --git a/Assets/Scripts/Managers/HitManager.cs b/Assets/Scripts/Managers/HitManager.cs
new file mode 100644
index 00000000..dfa6530f
--- /dev/null
+++ b/Assets/Scripts/Managers/HitManager.cs
@@ -0,0 +1,121 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public struct HitInfo
+{
+ public HitDefination hitDef;
+ public Hitbox hitbox;
+ public Hurtbox hurtbox;
+ public Vector3 contact;
+ public Vector3 size;
+}
+
+public struct HurtInfo
+{
+ public HitDefination hitDef;
+ public Hitbox hitbox;
+ public Hurtbox hurtbox;
+ public Vector3 contact;
+ public Vector3 size;
+}
+
+public class HitManager : Singleton<HitManager>
+{
+ private List<Hitbox> m_HitBoxes = new List<Hitbox>();
+ private List<Hurtbox> m_HurtBoxes = new List<Hurtbox>();
+
+ public void AddHitBox(Hitbox hitbox)
+ {
+ m_HitBoxes.Add(hitbox);
+ }
+
+ public void AddHurtBox(Hurtbox hurtbox)
+ {
+ m_HurtBoxes.Add(hurtbox);
+ }
+
+ /// <summary>
+ /// 根据碰撞结果产生击中信息
+ /// </summary>
+ public void OnPhysicsUpdate()
+ {
+ for(int i = 0;i < m_HitBoxes.Count; ++i)
+ {
+ Hitbox hitbox = m_HitBoxes[i];
+ if (hitbox == null)
+ return;
+ for (int j = 0; j < PhysicsWorld.Instance.Collisions.Count; ++j)
+ {
+ PhysicsCollisionInfo info = PhysicsWorld.Instance.Collisions[j];
+ PhysicsPrimitive collider;
+ if(info.prim1 == hitbox.Collider)
+ {
+ collider = info.prim2;
+ }
+ else if(info.prim2 == hitbox.Collider)
+ {
+ collider = info.prim1;
+ }
+ else
+ {
+ continue;
+ }
+
+ Hurtbox hurtbox = GetHurtboxByCollider(collider);
+ if(hurtbox == null)
+ {
+ Debug.LogError("没有找到hurtbox");
+ continue;
+ }
+
+ HitDefination hitDef = null;
+
+ if (hitbox.Host is Avatar)
+ {
+ Avatar attacker = hitbox.Host as Avatar;
+ Hit hit = attacker.GetHit();
+ if(hit == null)
+ continue;
+ if (hit.HasRecord(hurtbox.Host))
+ continue;
+ hit.AddRecord(hurtbox.Host);
+ hitDef = hit.defination;
+ }
+
+ // 发送击中消息
+ HitInfo hitInfo = new HitInfo ();
+ hitInfo.hitbox = hitbox;
+ hitInfo.hurtbox = hurtbox;
+ hitInfo.contact = info.contact;
+ hitInfo.size = info.size;
+ hitInfo.hitDef = hitDef;
+
+ hitbox.Host.OnHit(hitInfo);
+
+ // 发送受击消息
+ HurtInfo hurtInfo = new HurtInfo();
+ hurtInfo.hitbox = hitbox;
+ hurtInfo.hurtbox = hurtbox;
+ hurtInfo.contact = info.contact;
+ hurtInfo.size = info.size;
+ hurtInfo.hitDef = hitDef;
+
+ hurtbox.Host.OnHurt(hurtInfo);
+ }
+ }
+ }
+
+ Hurtbox GetHurtboxByCollider(PhysicsPrimitive collider)
+ {
+ foreach(var hurtbox in m_HurtBoxes)
+ {
+ if(hurtbox.Collider == collider)
+ {
+ return hurtbox;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/Assets/Scripts/Managers/HitManager.cs.meta b/Assets/Scripts/Managers/HitManager.cs.meta
new file mode 100644
index 00000000..dab849f7
--- /dev/null
+++ b/Assets/Scripts/Managers/HitManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e99f64b7dd0fd8d4aa9d7cc0d8fa2165
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Physics/PhysicsWorld.cs b/Assets/Scripts/Physics/PhysicsWorld.cs
index c5fbe046..ec3b0ac8 100644
--- a/Assets/Scripts/Physics/PhysicsWorld.cs
+++ b/Assets/Scripts/Physics/PhysicsWorld.cs
@@ -33,6 +33,11 @@ public enum PhysicsTag
/// </summary>
public class PhysicsWorld : Singleton<PhysicsWorld>
{
+ public delegate void Callback();
+
+ public Callback onUpdate;
+ public Callback onAfterUpdate;
+
private int m_UpdateRate = 60;
// 重力加速度
private readonly Vector3 m_Gravity = new Vector3(0, -30f, 0);
@@ -118,10 +123,13 @@ public class PhysicsWorld : Singleton<PhysicsWorld>
while (deltaTime > 1f / m_UpdateRate)
{
Tick();
+ if(onUpdate != null)
+ onUpdate();
deltaTime -= 1f / m_UpdateRate;
}
m_TimeCount -= deltaTime;
- AfterUpdate();
+ if(onAfterUpdate != null)
+ onAfterUpdate();
}
// 更新之前
@@ -130,12 +138,6 @@ public class PhysicsWorld : Singleton<PhysicsWorld>
m_CollisionInfo.Clear();
}
- // 更新之后
- private void AfterUpdate()
- {
-
- }
-
public void DrawGizmos()
{
#if UNITY_EDITOR
diff --git a/Assets/Scripts/Props.meta b/Assets/Scripts/Props.meta
new file mode 100644
index 00000000..bb96602e
--- /dev/null
+++ b/Assets/Scripts/Props.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f299520ed9fcf4a45858ad4ef5a8d5d1
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Scene.meta b/Assets/Scripts/Scene.meta
new file mode 100644
index 00000000..eb7a8716
--- /dev/null
+++ b/Assets/Scripts/Scene.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: eaee2d0f48cff9b40baf0686a8105600
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Test/ArmorSoldierScript.cs b/Assets/Scripts/Test/ArmorSoldierScript.cs
index 924d7874..b8afa8ee 100644
--- a/Assets/Scripts/Test/ArmorSoldierScript.cs
+++ b/Assets/Scripts/Test/ArmorSoldierScript.cs
@@ -36,4 +36,11 @@ public class ArmorSoldierScript : Avatar
animator.CrossFade(Anim_HurtFront, 0);
}
+ public override void OnHurt(HurtInfo hurtInfo)
+ {
+ base.OnHurt(hurtInfo);
+ Hurt();
+ m_Body.AddForce(new Vector3(1000, 2000,0));
+ }
+
}
diff --git a/Assets/Scripts/Test/SaionjiScript.cs b/Assets/Scripts/Test/SaionjiScript.cs
index b63d4f7c..e2386350 100644
--- a/Assets/Scripts/Test/SaionjiScript.cs
+++ b/Assets/Scripts/Test/SaionjiScript.cs
@@ -95,4 +95,14 @@ public partial class SaionjiScript : Avatar
}
}
+ public override void OnHit(HitInfo hitInfo)
+ {
+ base.OnHit(hitInfo);
+ }
+
+ public override void OnHurt(HurtInfo hurtInfo)
+ {
+ base.OnHurt(hurtInfo);
+ }
+
}
diff --git a/Assets/Scripts/Test/SaionjiUberAbility.cs b/Assets/Scripts/Test/SaionjiUberAbility.cs
index b4d6444f..b1f39938 100644
--- a/Assets/Scripts/Test/SaionjiUberAbility.cs
+++ b/Assets/Scripts/Test/SaionjiUberAbility.cs
@@ -17,7 +17,7 @@ public class SaionjiUberAbility : UberAbility
{
}
- public override void OnLateUpdate()
+ public override void OnPhysicsUpdate()
{
}