diff options
Diffstat (limited to 'Assets/Scripts')
-rw-r--r-- | Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs | 2 | ||||
-rw-r--r-- | Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs | 184 | ||||
-rw-r--r-- | Assets/Scripts/AbilitySystem/Actions/ActionJumpForward.cs | 25 | ||||
-rw-r--r-- | Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs | 19 | ||||
-rw-r--r-- | Assets/Scripts/AbilitySystem/Conditions/Camera.meta (renamed from Assets/Scripts/AbilitySystem/Actions/ActionEffects.meta) | 2 | ||||
-rw-r--r-- | Assets/Scripts/AbilitySystem/Conditions/ConditionBase.cs | 2 | ||||
-rw-r--r-- | Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs | 18 | ||||
-rw-r--r-- | Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs.meta | 11 | ||||
-rw-r--r-- | Assets/Scripts/Test/SaionjiScript_Ability.cs | 29 |
9 files changed, 177 insertions, 115 deletions
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<Trigger> m_Triggers = new List<Trigger>();
@@ -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 }
/// <summary>
- /// 着地
+ /// 结束
/// </summary>
/// <returns></returns>
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;
}
+ /// <summary>
+ /// 着地
+ /// </summary>
+ /// <returns></returns>
+ 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/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/Actions/ActionEffects.meta b/Assets/Scripts/AbilitySystem/Conditions/Camera.meta index 17a426dd..bfa55719 100644 --- a/Assets/Scripts/AbilitySystem/Actions/ActionEffects.meta +++ b/Assets/Scripts/AbilitySystem/Conditions/Camera.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0b5ccfefc2e6b104a8566f4da9a16c5f +guid: 8d7f28027add89c448243fbe5ea14144 folderAsset: yes DefaultImporter: externalObjects: {} 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 /// </summary>
public sealed class ConditionMultiAnd : ConditionBase
{
- List<ConditionBase> m_Conditions;
+ List<ConditionBase> m_Conditions = new List<ConditionBase>();
public ConditionMultiAnd(List<ConditionBase> 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: diff --git a/Assets/Scripts/Test/SaionjiScript_Ability.cs b/Assets/Scripts/Test/SaionjiScript_Ability.cs index c3fa94ce..10f358e4 100644 --- a/Assets/Scripts/Test/SaionjiScript_Ability.cs +++ b/Assets/Scripts/Test/SaionjiScript_Ability.cs @@ -19,6 +19,18 @@ public partial class SaionjiScript : MonoBehaviour return new ConditionAnd(c1, c2);
}
+
+ ConditionBase Ands(params ConditionBase[] cond)
+ {
+ List<ConditionBase> conditions = new List<ConditionBase>();
+ for(int i = 0;i < cond.Length; ++i)
+ {
+ conditions.Add(cond[i]);
+ }
+ ConditionMultiAnd and = new ConditionMultiAnd(conditions);
+ return and;
+ }
+
ConditionBase Or(ConditionBase c1, ConditionBase c2)
{
return new ConditionOr(c1,c2);
@@ -42,8 +54,8 @@ public partial class SaionjiScript : MonoBehaviour jumpConfig.collider = m_BodyCollider;
jumpConfig.body = m_Body;
jumpConfig.neutralJumpSpeedY = 10f;
- jumpConfig.fowardJumpSpeedX = 1f;
- jumpConfig.backwardJumpSpeedX = -1f;
+ jumpConfig.fowardJumpSpeedX = 5f;
+ jumpConfig.backwardJumpSpeedX = -5f;
jumpConfig.animJump = Anim_JumpStart;
jumpConfig.animJumpEnd = Anim_JumpEnd;
jumpConfig.animNU = Anim_JumpUp;
@@ -83,6 +95,7 @@ public partial class SaionjiScript : MonoBehaviour ActionTowardRight towardRight = new ActionTowardRight(this.transform);
ActionJump toJump = new ActionJump(m_AbilitySystem, jump);
+ ActionJumpForward toJumpForward = new ActionJumpForward(m_AbilitySystem, jump);
ActionSwitchAbility switchToMove = new ActionSwitchAbility(m_AbilitySystem, move);
ActionSwitchAbility switchToIdle = new ActionSwitchAbility(m_AbilitySystem, idle);
@@ -114,6 +127,7 @@ public partial class SaionjiScript : MonoBehaviour ConditionNoMoveButtonHold condNoMoveButtonHold = new ConditionNoMoveButtonHold();
ConditionButtonHold condRightButtonHold = new ConditionButtonHold(GamepadButton.Right);
ConditionButtonHold condLeftButtonHold = new ConditionButtonHold(GamepadButton.Left);
+ ConditionCommand condUpCmd = new ConditionCommand(GamepadButton.Up);
ConditionCommand condTriangleCmd = new ConditionCommand(GamepadButton.Triangle);
ConditionCommand condCircleCmd = new ConditionCommand(GamepadButton.Circle);
ConditionCommand condCrossCmd = new ConditionCommand(GamepadButton.Cross);
@@ -128,6 +142,7 @@ public partial class SaionjiScript : MonoBehaviour ConditionHit condIsHit = new ConditionHit(this);
ConditionJumpDone condJumpDone = new ConditionJumpDone(jump);
+ ConditionJumpOnGround condJumpOnGround = new ConditionJumpOnGround(jump);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// common triggers
@@ -142,7 +157,7 @@ public partial class SaionjiScript : MonoBehaviour ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// idle ability
- trigger = new Trigger(condTriangleCmd, toJump) ;
+ trigger = new Trigger(condUpCmd, toJump) ;
idle.AddTrigger(trigger);
trigger = new Trigger(And(condTowardRight, condDRC), new List<ActionBase> { wipeCmdRecord, switchToSuperKick });
idle.AddTrigger(trigger);
@@ -166,6 +181,8 @@ public partial class SaionjiScript : MonoBehaviour idle.AddTrigger(triggerTurnLeft);
// move ability
+ trigger = new Trigger(Or(Ands(condRightButtonHold, condTowardRight, condUpCmd), Ands(condLeftButtonHold, condTowardLeft, condUpCmd)), toJumpForward);
+ move.AddTrigger(trigger);
trigger = new Trigger(And(condTowardRight, And(condRightCmd, condRight2Cmd)), new List<ActionBase> { wipeCmdRecord, switchToDash, });
move.AddTrigger(trigger);
trigger = new Trigger(And(condTowardLeft, And(condLeftCmd, condLeft2Cmd)), new List<ActionBase> { wipeCmdRecord, switchToDash });
@@ -187,8 +204,10 @@ public partial class SaionjiScript : MonoBehaviour trigger = new Trigger(condCrossCmd, switchToSideKick);
move.AddTrigger(trigger);
- // jump ability
- trigger = new Trigger(condJumpDone, switchToIdle);
+ // jump ability
+ trigger = new Trigger(condJumpOnGround, new ActionSetVelocity(m_Body, Vector3.zero), TriggerOnlyOnce.On, TriggerSwallow.Off);
+ jump.AddTrigger(trigger);
+ trigger = new Trigger(condJumpDone, switchToIdle);
jump.AddTrigger(trigger);
// dash ability
|