From 8834c57999ce2e9d88262d5e7d2f31b65eaf3477 Mon Sep 17 00:00:00 2001 From: chai Date: Tue, 27 Oct 2020 09:08:54 +0800 Subject: =?UTF-8?q?*=E8=B7=B3=E8=B7=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbilitySystem/Abilities/AttackAbility.cs | 2 +- .../Scripts/AbilitySystem/Abilities/JumpAbility.cs | 184 +++++++++++---------- .../AbilitySystem/Actions/ActionEffects.meta | 8 - .../AbilitySystem/Actions/ActionJumpForward.cs | 25 +-- .../AbilitySystem/Actions/ActionSetPosition.cs | 19 +-- .../Scripts/AbilitySystem/Conditions/Camera.meta | 8 + .../AbilitySystem/Conditions/ConditionBase.cs | 2 +- .../Conditions/ConditionJumpOnGround.cs | 18 ++ .../Conditions/ConditionJumpOnGround.cs.meta | 11 ++ 9 files changed, 160 insertions(+), 117 deletions(-) delete mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionEffects.meta create mode 100644 Assets/Scripts/AbilitySystem/Conditions/Camera.meta create mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs create mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs.meta (limited to 'Assets/Scripts/AbilitySystem') diff --git a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs index 7b178621..168b6086 100644 --- a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs +++ b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs @@ -64,7 +64,7 @@ public class AttackAbility : AbilityBase if(m_Config.body != null) { - m_Config.body.Velocity = m_Config.velocity; + m_Config.body.LocalVelocity = m_Config.velocity; } } diff --git a/Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs index b6615516..e0f73efa 100644 --- a/Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs +++ b/Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs @@ -62,6 +62,9 @@ public class JumpAbility : AbilityBase int m_CurAnim; State m_CurState; + int m_CurUpMotion; + int m_CurDownMotion; + Vector3 m_CurInitVelocity; private List m_Triggers = new List(); @@ -87,93 +90,99 @@ public class JumpAbility : AbilityBase { m_Dir = dir; } - + public override void OnEnter() { base.OnEnter(); m_CurAnim = 0; - OnUpdate(); - } + + switch(m_Dir) + { + case Direction.Neutral: + m_CurUpMotion = m_AnimJumpNeutralUpwards; + m_CurDownMotion = m_AnimJumpNeutralDownwards; + m_CurInitVelocity = new Vector3(0, m_NeutralJumpSpeedY, 0); + break; + case Direction.Forward: + m_CurUpMotion = m_AnimJumpFwdUpwards; + m_CurDownMotion = m_AnimJumpFwdDownwards; + m_CurInitVelocity = new Vector3(m_FowardJumpSpeedX, m_NeutralJumpSpeedY, 0); + break; + case Direction.Backward: + m_CurUpMotion = m_AnimJumpBackUpwards; + m_CurDownMotion = m_AnimJumpBackDownwards; + m_CurInitVelocity = new Vector3(m_BackwardJumpSpeedX, m_NeutralJumpSpeedY, 0); + break; + } + + bool isOnGround = m_Collider.IsOnGround; + bool isUp = m_Body.Velocity.y > 0; + bool isDown = m_Body.Velocity.y < 0; + bool isFreeFall = Mathf.Approximately(m_Body.Velocity.y, 0); + + if (isOnGround) + m_CurState = State.Ready; + else if (isUp) + m_CurState = State.Up; + else if (isDown || isFreeFall) + m_CurState = State.Down; + } public override void OnUpdate() { - - AnimatorStateInfo state = m_Animator.GetCurrentAnimatorStateInfo(0); - - bool onGround = m_Collider.IsOnGround; - - float fadeDuration = 0.2f; - - if (onGround && m_CurAnim == m_AnimJumpNeutralDownwards && m_CurAnim != m_AnimJumpEnd) - { - m_Animator.CrossFade(m_AnimJumpEnd, 0); - m_CurAnim = m_AnimJumpEnd; - } - - foreach (var abilityTrigger in m_Triggers) - { - if (abilityTrigger.Update() && abilityTrigger.Swallow) - return ; - } - - if(onGround && m_CurAnim != m_AnimJumpStart && m_CurAnim != m_AnimJumpEnd) - { - m_Animator.CrossFade(m_AnimJumpStart, 0.1f); - m_CurAnim = m_AnimJumpStart; - return; - } - - if(onGround && m_CurAnim == m_AnimJumpStart && state.normalizedTime >= 1f) - { - if (m_Dir == Direction.Neutral) - m_Body.LocalVelocity = new Vector3(0, m_NeutralJumpSpeedY,0); - else if(m_Dir == Direction.Forward) - m_Body.LocalVelocity = new Vector3(m_FowardJumpSpeedX, m_NeutralJumpSpeedY, 0); - else if(m_Dir == Direction.Backward) - m_Body.LocalVelocity = new Vector3(m_BackwardJumpSpeedX, m_NeutralJumpSpeedY, 0); - } - - bool neutral = Mathf.Approximately(m_Body.LocalVelocity.x, 0); - //bool forward = m_Body.LocalVelocity.x > 0; - //bool backward = m_Body.LocalVelocity.x < 0; - bool forward = m_Dir == Direction.Forward; - bool backward = m_Dir == Direction.Backward; - - bool upward = m_Body.LocalVelocity.y > 0; - bool downward = m_Body.LocalVelocity.y < 0; - - if (neutral && upward && m_CurAnim != m_AnimJumpNeutralUpwards) - { - m_Animator.CrossFade(m_AnimJumpNeutralUpwards, fadeDuration); - m_CurAnim = m_AnimJumpNeutralUpwards; - } - else if (forward && upward && m_CurAnim != m_AnimJumpFwdUpwards) - { - m_Animator.CrossFade(m_AnimJumpFwdUpwards, fadeDuration); - m_CurAnim = m_AnimJumpFwdUpwards; - } - else if (backward && upward && m_CurAnim != m_AnimJumpBackUpwards) - { - m_Animator.CrossFade(m_AnimJumpBackUpwards, fadeDuration); - m_CurAnim = m_AnimJumpBackUpwards; - } - else if (neutral && downward && m_CurAnim != m_AnimJumpNeutralDownwards) - { - m_Animator.CrossFade(m_AnimJumpNeutralDownwards, fadeDuration); - m_CurAnim = m_AnimJumpNeutralDownwards; - } - else if (forward && downward && m_CurAnim != m_AnimJumpFwdDownwards) - { - m_Animator.CrossFade(m_AnimJumpFwdDownwards, fadeDuration); - m_CurAnim = m_AnimJumpFwdDownwards; - } - else if (backward && downward && m_CurAnim != m_AnimJumpBackDownwards) - { - m_Animator.CrossFade(m_AnimJumpBackDownwards, fadeDuration); - m_CurAnim = m_AnimJumpBackDownwards; - } - + foreach (var abilityTrigger in m_Triggers) + { + if (abilityTrigger.Update() && abilityTrigger.Swallow) + return; + } + + AnimatorStateInfo motionInfo = m_Animator.GetCurrentAnimatorStateInfo(0); + + switch (m_CurState) + { + case State.Ready: + if(m_CurAnim != m_AnimJumpStart) + { + m_Animator.CrossFade(m_AnimJumpStart, 0.2f); + m_CurAnim = m_AnimJumpStart; + } + if(motionInfo.shortNameHash == m_AnimJumpStart && motionInfo.normalizedTime >= 1f) + { + m_Body.LocalVelocity = m_CurInitVelocity; + m_CurState = State.Up; + } + break; + case State.Up: + if(m_CurAnim != m_CurUpMotion) + { + m_Animator.CrossFade(m_CurUpMotion, 0.2f); + m_CurAnim = m_CurUpMotion; + } + if(m_Body.Velocity.y <= 0) + { + m_CurState = State.Down; + } + break; + case State.Down: + if(m_CurAnim != m_CurDownMotion) + { + m_Animator.CrossFade(m_CurDownMotion, 0.2f); + m_CurAnim = m_CurDownMotion; + } + if(m_Collider.IsOnGround) + { + m_CurState = State.End; + } + break; + case State.End: + if(m_CurAnim != m_AnimJumpEnd) + { + m_Animator.CrossFade(m_AnimJumpEnd, 0.2f); + m_CurAnim = m_AnimJumpEnd; + } + break; + } } public override void OnLateUpdate() @@ -198,16 +207,12 @@ public class JumpAbility : AbilityBase } /// - /// 着地 + /// 结束 /// /// public bool IsJumpDone() { - bool onGround = m_Collider.IsOnGround; - if (!onGround) - return false; - - if (m_CurAnim == m_AnimJumpEnd) + if (m_CurState == State.End) { AnimatorStateInfo state = m_Animator.GetCurrentAnimatorStateInfo(0); return state.shortNameHash == m_AnimJumpEnd && state.normalizedTime >= 1f; @@ -216,6 +221,15 @@ public class JumpAbility : AbilityBase return false; } + /// + /// 着地 + /// + /// + public bool IsJumpGround() + { + return m_CurState == State.End && m_Collider.IsOnGround; + } + public void AddTrigger(Trigger trigger) { if (trigger == null || m_Triggers.Contains(trigger)) diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionEffects.meta b/Assets/Scripts/AbilitySystem/Actions/ActionEffects.meta deleted file mode 100644 index 17a426dd..00000000 --- a/Assets/Scripts/AbilitySystem/Actions/ActionEffects.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0b5ccfefc2e6b104a8566f4da9a16c5f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionJumpForward.cs b/Assets/Scripts/AbilitySystem/Actions/ActionJumpForward.cs index 3b1de41d..4e71dcf6 100644 --- a/Assets/Scripts/AbilitySystem/Actions/ActionJumpForward.cs +++ b/Assets/Scripts/AbilitySystem/Actions/ActionJumpForward.cs @@ -2,17 +2,20 @@ using System.Collections.Generic; using UnityEngine; -public class ActionJumpForward : MonoBehaviour +// 垂直跳跃,切换到jump ability +public class ActionJumpForward : ActionSwitchAbility { - // Start is called before the first frame update - void Start() - { - - } + private JumpAbility m_JumpAbility; - // Update is called once per frame - void Update() - { - - } + public ActionJumpForward(AbilitySystem system, JumpAbility jumpAbility) + : base(system, jumpAbility) + { + m_JumpAbility = jumpAbility; + } + + public override void Execute() + { + m_JumpAbility.SetDir(JumpAbility.Direction.Forward); + base.Execute(); // switch to jump ability + } } diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs b/Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs index 913eb3d2..a4e62294 100644 --- a/Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs +++ b/Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs @@ -2,17 +2,14 @@ using System.Collections.Generic; using UnityEngine; -public class ActionSetPosition : MonoBehaviour +public class ActionSetPosition : ActionBase { - // Start is called before the first frame update - void Start() - { - - } + public ActionSetPosition() + { + } - // Update is called once per frame - void Update() - { - - } + public override void Execute() + { + throw new System.NotImplementedException(); + } } diff --git a/Assets/Scripts/AbilitySystem/Conditions/Camera.meta b/Assets/Scripts/AbilitySystem/Conditions/Camera.meta new file mode 100644 index 00000000..bfa55719 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/Camera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8d7f28027add89c448243fbe5ea14144 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionBase.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionBase.cs index 73b9b380..8dff29da 100644 --- a/Assets/Scripts/AbilitySystem/Conditions/ConditionBase.cs +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionBase.cs @@ -127,7 +127,7 @@ public sealed class ConditionNone : ConditionBase /// public sealed class ConditionMultiAnd : ConditionBase { - List m_Conditions; + List m_Conditions = new List(); public ConditionMultiAnd(List conditions) : base() diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs new file mode 100644 index 00000000..47f74cab --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ConditionJumpOnGround : ConditionBase +{ + JumpAbility m_Jump; + + public ConditionJumpOnGround(JumpAbility jump) + { + m_Jump = jump; + } + + public override bool Evaluate() + { + return m_Jump.IsJumpGround(); + } +} diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs.meta b/Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs.meta new file mode 100644 index 00000000..33f0341b --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a04452218ec0b849bbed3d0ba35cd12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: -- cgit v1.1-26-g67d0