From 65ed53a40f990e895305ff17a5e48e3cd6b8785b Mon Sep 17 00:00:00 2001 From: chai Date: Sat, 24 Oct 2020 17:30:07 +0800 Subject: =?UTF-8?q?*=E7=89=A9=E7=90=86=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/AbilitySystem/Abilities/AbilityBase.cs | 5 +++++ .../AbilitySystem/Abilities/AttackAbility.cs | 19 +++++++++++++++++ Assets/Scripts/AbilitySystem/AbilitySystem.cs | 17 +++++++++++++++ Assets/Scripts/AbilitySystem/Actions/ActionLog.cs | 18 ++++++++++++++++ .../AbilitySystem/Actions/ActionLog.cs.meta | 11 ++++++++++ .../Conditions/Interactive/ConditionHit.cs | 10 ++++++--- .../Conditions/Interactive/ConditionHurt.cs | 24 ++++++++++++---------- Assets/Scripts/AbilitySystem/IInteractable.cs | 21 +++++++++++++++++++ Assets/Scripts/AbilitySystem/IInteractable.cs.meta | 11 ++++++++++ 9 files changed, 122 insertions(+), 14 deletions(-) create mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionLog.cs create mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionLog.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/IInteractable.cs create mode 100644 Assets/Scripts/AbilitySystem/IInteractable.cs.meta (limited to 'Assets/Scripts/AbilitySystem') diff --git a/Assets/Scripts/AbilitySystem/Abilities/AbilityBase.cs b/Assets/Scripts/AbilitySystem/Abilities/AbilityBase.cs index 330850e2..8b1a5549 100644 --- a/Assets/Scripts/AbilitySystem/Abilities/AbilityBase.cs +++ b/Assets/Scripts/AbilitySystem/Abilities/AbilityBase.cs @@ -38,6 +38,11 @@ public abstract class AbilityBase /// public virtual void OnUpdate() { } + /// + /// 在物理模拟之后更新 + /// + public virtual void OnLateUpdate() { } + /// /// 过渡到下一个ability的回调 /// diff --git a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs index 9798d7a2..fc4ce7e1 100644 --- a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs +++ b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs @@ -13,6 +13,8 @@ public class AttackAbility : AbilityBase /// private List m_Triggers = new List(); + private List m_LateTriggers = new List(); + /// /// 从动画结束开始计时 /// @@ -79,6 +81,16 @@ public class AttackAbility : AbilityBase } } + // 在物理模拟之后 + public override void OnLateUpdate() + { + foreach (var trigger in m_LateTriggers) + { + if (trigger.Update() && trigger.Swallow) + break; + } + } + public void AddTrigger(Trigger trigger) { if (trigger == null || m_Triggers.Contains(trigger)) @@ -86,4 +98,11 @@ public class AttackAbility : AbilityBase m_Triggers.Add(trigger); } + public void AddLateTrigger(Trigger trigger) + { + if (trigger == null || m_LateTriggers.Contains(trigger)) + return; + m_LateTriggers.Add(trigger); + } + } diff --git a/Assets/Scripts/AbilitySystem/AbilitySystem.cs b/Assets/Scripts/AbilitySystem/AbilitySystem.cs index 0441e813..46156c55 100644 --- a/Assets/Scripts/AbilitySystem/AbilitySystem.cs +++ b/Assets/Scripts/AbilitySystem/AbilitySystem.cs @@ -37,6 +37,14 @@ public class AbilitySystem } } + public static void LateUpdate() + { + foreach (var systems in AbilitySystems) + { + systems.OnLateUpdate(); + } + } + public void ForceStart(AbilityBase ability) { if (ability == null) @@ -62,6 +70,15 @@ public class AbilitySystem } } + public void OnLateUpdate() + { + if(m_Currrent != null) + { + m_Currrent.OnLateUpdate(); + } + } + + public void SwitchToAbility(AbilityBase targetAbility) { if (m_Currrent != null) diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionLog.cs b/Assets/Scripts/AbilitySystem/Actions/ActionLog.cs new file mode 100644 index 00000000..b276d2ef --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/ActionLog.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ActionLog : ActionBase +{ + string m_Content = ""; + + public ActionLog(string content) + { + m_Content = content; + } + + public override void Execute() + { + Debug.Log(m_Content); + } +} diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionLog.cs.meta b/Assets/Scripts/AbilitySystem/Actions/ActionLog.cs.meta new file mode 100644 index 00000000..92995276 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/ActionLog.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 012a5a398b677f94abeb0aa12659d5ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHit.cs b/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHit.cs index b50121fe..d36cc538 100644 --- a/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHit.cs +++ b/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHit.cs @@ -5,13 +5,17 @@ using UnityEngine; // hitbox击中 public class ConditionHit : ConditionBase { - public ConditionHit() + IInteractable m_Obj; + + public ConditionHit(IInteractable obj) { + m_Obj = obj; - } + } public override bool Evaluate() { - throw new System.NotImplementedException(); + bool isHit = m_Obj.IsHit(); + return isHit; } } diff --git a/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHurt.cs b/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHurt.cs index b4acd71a..8a76528d 100644 --- a/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHurt.cs +++ b/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHurt.cs @@ -2,17 +2,19 @@ using System.Collections.Generic; using UnityEngine; -public class ConditionHurt : MonoBehaviour +// hurtbox被击中 +public class ConditionHurt : ConditionBase { - // Start is called before the first frame update - void Start() - { - - } + IInteractable m_Obj; - // Update is called once per frame - void Update() - { - - } + public ConditionHurt(IInteractable obj) + { + m_Obj = obj; + } + + public override bool Evaluate() + { + bool isHit = m_Obj.IsHit(); + return isHit; + } } diff --git a/Assets/Scripts/AbilitySystem/IInteractable.cs b/Assets/Scripts/AbilitySystem/IInteractable.cs new file mode 100644 index 00000000..23e49912 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/IInteractable.cs @@ -0,0 +1,21 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public interface IInteractable +{ + PhysicsPrimitive[] GetAllPrimitive(); + + PhysicsBox GetHitbox(); + + PhysicsBox GetHurtbox(); + + PhysicsPrimitive[] GetAllHit(); + + bool IsHit(); + + bool IsHurt(); + + + +} diff --git a/Assets/Scripts/AbilitySystem/IInteractable.cs.meta b/Assets/Scripts/AbilitySystem/IInteractable.cs.meta new file mode 100644 index 00000000..ae065c04 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/IInteractable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6f243903bde9804488701c6d0f7920a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: -- cgit v1.1-26-g67d0