From 64061aee5d7849f348f07b78fc3f96ad7555c147 Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 2 Nov 2020 09:00:15 +0800 Subject: *jump --- Assets/Scripts/Avatar/Abilities/JumpAbility.cs | 44 +++++++++++++++++++------- 1 file changed, 33 insertions(+), 11 deletions(-) (limited to 'Assets/Scripts/Avatar/Abilities/JumpAbility.cs') diff --git a/Assets/Scripts/Avatar/Abilities/JumpAbility.cs b/Assets/Scripts/Avatar/Abilities/JumpAbility.cs index e0f73efa..5e953403 100644 --- a/Assets/Scripts/Avatar/Abilities/JumpAbility.cs +++ b/Assets/Scripts/Avatar/Abilities/JumpAbility.cs @@ -20,19 +20,23 @@ public struct JumpAbilityConfig public int animFD; public int animBD; public int animJumpEnd; + + public bool skipStart; //没有准备动作 } public class JumpAbility : AbilityBase { public enum Direction { + None, Neutral, Forward, Backward } - private enum State + public enum State { + None, Ready, Up, Down, @@ -66,7 +70,25 @@ public class JumpAbility : AbilityBase int m_CurDownMotion; Vector3 m_CurInitVelocity; - private List m_Triggers = new List(); + public State CurState + { + get + { + return m_CurState; + } + } + + public Direction CurDirection + { + get + { + return m_Dir; + } + } + + private List m_Triggers = new List(); + + bool m_SkipStart; public JumpAbility(JumpAbilityConfig config) { @@ -84,7 +106,8 @@ public class JumpAbility : AbilityBase m_AnimJumpBackUpwards = config.animBU; m_AnimJumpBackDownwards = config.animBD; m_AnimJumpEnd = config.animJumpEnd; // on ground again - } + m_SkipStart = config.skipStart; + } public void SetDir(Direction dir) { @@ -121,9 +144,9 @@ public class JumpAbility : AbilityBase bool isDown = m_Body.Velocity.y < 0; bool isFreeFall = Mathf.Approximately(m_Body.Velocity.y, 0); - if (isOnGround) + if (isOnGround && !m_SkipStart) m_CurState = State.Ready; - else if (isUp) + else if (isUp || isOnGround && m_SkipStart) m_CurState = State.Up; else if (isDown || isFreeFall) m_CurState = State.Down; @@ -149,17 +172,17 @@ public class JumpAbility : AbilityBase } 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_Body.LocalVelocity = m_CurInitVelocity; m_Animator.CrossFade(m_CurUpMotion, 0.2f); m_CurAnim = m_CurUpMotion; } - if(m_Body.Velocity.y <= 0) + if(m_Body.Velocity.y < 0) { m_CurState = State.Down; } @@ -167,7 +190,7 @@ public class JumpAbility : AbilityBase case State.Down: if(m_CurAnim != m_CurDownMotion) { - m_Animator.CrossFade(m_CurDownMotion, 0.2f); + m_Animator.CrossFade(m_CurDownMotion, 0.5f); m_CurAnim = m_CurDownMotion; } if(m_Collider.IsOnGround) @@ -210,12 +233,12 @@ public class JumpAbility : AbilityBase /// 结束 /// /// - public bool IsJumpDone() + public bool IsJumpDone(float t = 1f) { if (m_CurState == State.End) { AnimatorStateInfo state = m_Animator.GetCurrentAnimatorStateInfo(0); - return state.shortNameHash == m_AnimJumpEnd && state.normalizedTime >= 1f; + return state.shortNameHash == m_AnimJumpEnd && state.normalizedTime >= t; } return false; @@ -237,5 +260,4 @@ public class JumpAbility : AbilityBase m_Triggers.Add(trigger); } - } \ No newline at end of file -- cgit v1.1-26-g67d0