summaryrefslogtreecommitdiff
path: root/Assets/Scripts
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-10-17 15:39:34 +0800
committerchai <chaifix@163.com>2020-10-17 15:39:34 +0800
commitfee35151213939d61d2dbd9d6a0ba71ac93b91cf (patch)
tree3aa986e27f36e47242b9a12b7e7b6a8d5d8c0fc8 /Assets/Scripts
parentf99c4d56cf95c563e95d3965ffd6d8ba33b660ee (diff)
+ 连击测试
Diffstat (limited to 'Assets/Scripts')
-rw-r--r--Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs65
-rw-r--r--Assets/Scripts/AbilitySystem/Abilities/IdleAbility.cs22
-rw-r--r--Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs22
-rw-r--r--Assets/Scripts/AbilitySystem/AbilitySystem.cs12
-rw-r--r--Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs20
-rw-r--r--Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs.meta11
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs2
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs9
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs18
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs.meta11
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/ConditionCommand.cs4
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/ConditionCommandSeq.cs2
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs18
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs.meta11
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs16
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs.meta11
-rw-r--r--Assets/Scripts/AbilitySystem/Trigger.cs27
-rw-r--r--Assets/Scripts/Input/Command.cs8
-rw-r--r--Assets/Scripts/Input/InputManager.cs66
-rw-r--r--Assets/Scripts/Test/SaionjiScript.cs12
-rw-r--r--Assets/Scripts/Test/SaionjiScript_Ability.cs55
21 files changed, 355 insertions, 67 deletions
diff --git a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs
index 6732cf57..067d49a8 100644
--- a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs
+++ b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs
@@ -2,12 +2,67 @@
using System.Collections.Generic;
using UnityEngine;
-/// <summary>
-/// 单个招式ability
-/// </summary>
-public class AttackAbilityBase : AbilityBase
+public class AttackAbility : AbilityBase
{
- // 攻击ability默认都会回到idle
+ Animator m_Animator;
+ int m_AnimHash;
+ /// <summary>
+ /// 在跑动状态时可以切换的ability
+ /// </summary>
+ private List<Trigger> m_Triggers = new List<Trigger>();
+
+ public AttackAbility(Animator animator, int animation)
+ {
+ m_Animator = animator;
+ m_AnimHash = animation;
+ }
+
+ public override void OnInit()
+ {
+
+ }
+
+ public override void OnDefend()
+ {
+ throw new System.NotImplementedException();
+ }
+
+ public override void OnEnter()
+ {
+ m_Animator.CrossFade(m_AnimHash, 0);
+ }
+
+ public override void OnExit()
+ {
+ }
+
+ public override void OnHit()
+ {
+ }
+
+ public override void OnHurt()
+ {
+ }
+
+ public override void OnTranslate(AbilityBase to)
+ {
+ }
+
+ public override void OnUpdate()
+ {
+ foreach (var abilityTrigger in m_Triggers)
+ {
+ if (abilityTrigger.Update())
+ break;
+ }
+ }
+
+ public void AddTrigger(Trigger trigger)
+ {
+ if (trigger == null || m_Triggers.Contains(trigger))
+ return;
+ m_Triggers.Add(trigger);
+ }
}
diff --git a/Assets/Scripts/AbilitySystem/Abilities/IdleAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/IdleAbility.cs
index 4b9cd21e..8be58188 100644
--- a/Assets/Scripts/AbilitySystem/Abilities/IdleAbility.cs
+++ b/Assets/Scripts/AbilitySystem/Abilities/IdleAbility.cs
@@ -5,25 +5,27 @@ using UnityEngine;
public class IdleAbility : AbilityBase
{
- /// <summary>
- /// idle的动画
- /// </summary>
+ Animator m_Animator;
+
int m_AnimHash;
/// <summary>
/// 在Idle状态时可以切换的ability
/// </summary>
- private List<Trigger> m_Triggers;
+ private List<Trigger> m_Triggers = new List<Trigger>();
- public IdleAbility(int animation)
+ public IdleAbility(Animator animator, int animation)
: base()
{
- m_AnimHash = animation;
+ m_Animator = animator;
+ m_AnimHash = animation;
}
public override void OnEnter()
{
-
+ m_Animator.speed = 1;
+ m_Animator.CrossFade(m_AnimHash, 0.3f);
+ m_Animator.speed = 0;
}
public override void OnInit()
@@ -42,9 +44,11 @@ public class IdleAbility : AbilityBase
base.OnUpdate();
}
- public void AddTrigger()
+ public void AddTrigger(Trigger trigger)
{
-
+ if (trigger == null || m_Triggers.Contains(trigger))
+ return;
+ m_Triggers.Add(trigger);
}
}
diff --git a/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs
index 2c39afd5..eadee433 100644
--- a/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs
+++ b/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs
@@ -4,11 +4,19 @@ using UnityEngine;
public class MoveAbility : AbilityBase
{
+ Animator m_Animator;
+ int m_AnimHash;
/// <summary>
/// 在跑动状态时可以切换的ability
/// </summary>
- private List<Trigger> m_Triggers;
+ private List<Trigger> m_Triggers = new List<Trigger>();
+
+ public MoveAbility(Animator animator, int animation)
+ {
+ m_Animator = animator;
+ m_AnimHash = animation;
+ }
public override void OnInit()
{
@@ -22,7 +30,7 @@ public class MoveAbility : AbilityBase
public override void OnEnter()
{
-
+ m_Animator.CrossFade(m_AnimHash, 0);
}
public override void OnExit()
@@ -31,7 +39,6 @@ public class MoveAbility : AbilityBase
public override void OnHit()
{
- throw new System.NotImplementedException();
}
public override void OnHurt()
@@ -40,7 +47,6 @@ public class MoveAbility : AbilityBase
public override void OnTranslate(AbilityBase to)
{
- throw new System.NotImplementedException();
}
public override void OnUpdate()
@@ -51,4 +57,12 @@ public class MoveAbility : AbilityBase
break;
}
}
+
+ public void AddTrigger(Trigger trigger)
+ {
+ if (trigger == null || m_Triggers.Contains(trigger))
+ return;
+ m_Triggers.Add(trigger);
+ }
+
}
diff --git a/Assets/Scripts/AbilitySystem/AbilitySystem.cs b/Assets/Scripts/AbilitySystem/AbilitySystem.cs
index 890c1b4b..b9b2b9ee 100644
--- a/Assets/Scripts/AbilitySystem/AbilitySystem.cs
+++ b/Assets/Scripts/AbilitySystem/AbilitySystem.cs
@@ -20,7 +20,7 @@ public class AbilitySystem
}
}
- private List<AbilityBase> m_Abilities;
+ private List<AbilityBase> m_Abilities = new List<AbilityBase>();
public void ForceStart(AbilityBase ability)
{
@@ -30,8 +30,8 @@ public class AbilitySystem
if (m_Currrent != null)
m_Currrent.OnExit();
- ability.OnEnter();
m_Currrent = ability;
+ m_Currrent.OnEnter();
}
public void AddAbility(AbilityBase ability)
@@ -47,4 +47,12 @@ public class AbilitySystem
}
}
+ public void SwitchToAbility(AbilityBase targetAbility)
+ {
+ if (m_Currrent != null)
+ m_Currrent.OnExit();
+ m_Currrent = targetAbility;
+ m_Currrent.OnEnter();
+ }
+
} \ No newline at end of file
diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs b/Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs
new file mode 100644
index 00000000..69c7f179
--- /dev/null
+++ b/Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs
@@ -0,0 +1,20 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionSwitchAbility : ActionBase
+{
+ AbilitySystem m_AbilitySystem;
+ AbilityBase m_TargetAbility;
+
+ public ActionSwitchAbility(AbilitySystem abilitySystem, AbilityBase targetAbility)
+ {
+ m_AbilitySystem = abilitySystem;
+ m_TargetAbility = targetAbility;
+ }
+
+ public override void Execute()
+ {
+ m_AbilitySystem.SwitchToAbility(m_TargetAbility);
+ }
+}
diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs.meta b/Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs.meta
new file mode 100644
index 00000000..3059d95d
--- /dev/null
+++ b/Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ce17bc5eca89ffc468e536284af75c4f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs
index 019c16a9..cfdcfab5 100644
--- a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs
+++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs
@@ -20,7 +20,7 @@ public class ConditionAnimAtEnd : ConditionBase
public override bool Evaluate()
{
AnimatorStateInfo info = m_Animator.GetCurrentAnimatorStateInfo(0);
- if(info.fullPathHash == m_AnimationHash)
+ if(info.shortNameHash == m_AnimationHash)
{
float t = info.normalizedTime;
if (t >= 0.99f)
diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs
index 82db03e0..b8f98065 100644
--- a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs
+++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs
@@ -12,14 +12,17 @@ public sealed class ConditionAnimRange : ConditionBase
public ConditionAnimRange(Animator animator, float start, float end)
{
- m_TimeRange.Set(start, end);
+ m_Animator = animator;
+
+ m_TimeRange.Set(start, end);
}
public override bool Evaluate()
{
AnimatorStateInfo info = m_Animator.GetCurrentAnimatorStateInfo(0);
float time = info.normalizedTime;
- return time >= m_TimeRange.x && time <= m_TimeRange.y;
- }
+ bool result = time >= m_TimeRange.x && time <= m_TimeRange.y;
+ return result;
+ }
}
diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs
new file mode 100644
index 00000000..52abad03
--- /dev/null
+++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionButtonHold : ConditionBase
+{
+ GamepadButton m_Button;
+
+ public ConditionButtonHold(GamepadButton button)
+ {
+ m_Button = button;
+ }
+
+ public override bool Evaluate()
+ {
+ return InputManager.Instance.IsButtonHold(m_Button);
+ }
+}
diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs.meta b/Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs.meta
new file mode 100644
index 00000000..82d350e2
--- /dev/null
+++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2b0cd6f63cbe32649a15ab38d5bb6ee3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionCommand.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionCommand.cs
index a7487d33..d735ef5b 100644
--- a/Assets/Scripts/AbilitySystem/Conditions/ConditionCommand.cs
+++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionCommand.cs
@@ -7,9 +7,9 @@ using UnityEngine;
/// </summary>
public class ConditionCommand : ConditionBase
{
- CommandCode m_TargetCommand;
+ GamepadButton m_TargetCommand;
- public ConditionCommand(CommandCode command)
+ public ConditionCommand(GamepadButton command)
{
m_TargetCommand = command;
}
diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionCommandSeq.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionCommandSeq.cs
index 745d2aa8..8c955400 100644
--- a/Assets/Scripts/AbilitySystem/Conditions/ConditionCommandSeq.cs
+++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionCommandSeq.cs
@@ -8,7 +8,7 @@ using UnityEngine;
public class ConditionCommandSeq : ConditionBase
{
- public ConditionCommandSeq(List<CommandCode> commandSeq, float maxDeltaTime)
+ public ConditionCommandSeq(List<GamepadButton> commandSeq, float maxDeltaTime)
{
}
diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs
new file mode 100644
index 00000000..1084f191
--- /dev/null
+++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionMoveButtonHold : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs.meta b/Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs.meta
new file mode 100644
index 00000000..45cf47bb
--- /dev/null
+++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 77299e998cbe9d1429c2d0b731bff6e3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs
new file mode 100644
index 00000000..06a76784
--- /dev/null
+++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs
@@ -0,0 +1,16 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionNoMoveButtonHold : ConditionBase
+{
+ public ConditionNoMoveButtonHold()
+ {
+ }
+
+ public override bool Evaluate()
+ {
+ bool isMoveButtonDown = InputManager.Instance.IsButtonHold(GamepadButton.Left) || InputManager.Instance.IsButtonHold(GamepadButton.Right);
+ return !isMoveButtonDown;
+ }
+}
diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs.meta b/Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs.meta
new file mode 100644
index 00000000..db883c19
--- /dev/null
+++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ce1302d58bf3a7043b6e2e25d13525d9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/AbilitySystem/Trigger.cs b/Assets/Scripts/AbilitySystem/Trigger.cs
index b7b4751c..416655ee 100644
--- a/Assets/Scripts/AbilitySystem/Trigger.cs
+++ b/Assets/Scripts/AbilitySystem/Trigger.cs
@@ -9,19 +9,24 @@ using UnityEngine;
public sealed class Trigger
{
private ConditionBase m_Condition;
- private List<ActionBase> m_ActionChain;
+ private List<ActionBase> m_ActionChain = new List<ActionBase>();
- public Trigger(ConditionBase condition, List<ActionBase> actions)
- {
- m_Condition = condition;
+ public Trigger(ConditionBase condition, List<ActionBase> actions)
+ {
+ m_Condition = condition;
m_ActionChain.AddRange(actions);
- }
-
- /// <summary>
- /// 如果触发执行了,返回true,否则返回false
- /// </summary>
- /// <returns></returns>
- public bool Update()
+ }
+ public Trigger(ConditionBase condition, ActionBase action)
+ {
+ m_Condition = condition;
+ m_ActionChain.Add(action);
+ }
+
+ /// <summary>
+ /// 如果触发执行了,返回true,否则返回false
+ /// </summary>
+ /// <returns></returns>
+ public bool Update()
{
if (m_Condition.Evaluate())
{
diff --git a/Assets/Scripts/Input/Command.cs b/Assets/Scripts/Input/Command.cs
index fae88684..7ef6c9eb 100644
--- a/Assets/Scripts/Input/Command.cs
+++ b/Assets/Scripts/Input/Command.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using UnityEngine;
-public enum CommandCode
+public enum GamepadButton
{
Blank,
@@ -22,13 +22,13 @@ public enum CommandCode
public struct Command
{
- public CommandCode code; // 指令码
+ public GamepadButton code; // 指令码
public float time; // 触发时间
public int id;
- public static Command Blank = new Command(CommandCode.Blank, 0);
+ public static Command Blank = new Command(GamepadButton.Blank, 0);
- public Command(CommandCode code, float time)
+ public Command(GamepadButton code, float time)
{
this.code = code;
this.time = time;
diff --git a/Assets/Scripts/Input/InputManager.cs b/Assets/Scripts/Input/InputManager.cs
index 25daf848..771032a8 100644
--- a/Assets/Scripts/Input/InputManager.cs
+++ b/Assets/Scripts/Input/InputManager.cs
@@ -20,36 +20,36 @@ public class InputManager : Singleton<InputManager>
public void Init()
{
m_CommandRecord = new List<Command>();
- m_CurrentCommand = new Command(CommandCode.Blank, 0);
+ m_CurrentCommand = new Command(GamepadButton.Blank, 0);
}
public void Update()
{
- CommandCode cmd = CommandCode.Blank;
+ GamepadButton cmd = GamepadButton.Blank;
// 移动
if (Input.GetKeyDown("w"))
- cmd = CommandCode.Up;
+ cmd = GamepadButton.Up;
if (Input.GetKeyDown("s"))
- cmd = CommandCode.Down;
+ cmd = GamepadButton.Down;
if (Input.GetKeyDown("a"))
- cmd = CommandCode.Left;
+ cmd = GamepadButton.Left;
if (Input.GetKeyDown("d"))
- cmd = CommandCode.Right;
+ cmd = GamepadButton.Right;
// 动作
if (Input.GetKeyDown("j"))
- cmd = CommandCode.Circle;
+ cmd = GamepadButton.Circle;
if (Input.GetKeyDown("k"))
- cmd = CommandCode.Triangle;
+ cmd = GamepadButton.Triangle;
if (Input.GetKeyDown("l"))
- cmd = CommandCode.Square;
+ cmd = GamepadButton.Square;
if(Input.GetKeyDown("u"))
- cmd = CommandCode.Cross;
+ cmd = GamepadButton.Cross;
- if(cmd != CommandCode.Blank)
+ if(cmd != GamepadButton.Blank)
{
float time = Time.time;
Command command = new Command(cmd, time);
- Debug.Log(CommandToString(command));
+ //Debug.Log(CommandToString(command));
m_CurrentCommand = command;
m_CommandRecord.Add(command);
@@ -57,24 +57,24 @@ public class InputManager : Singleton<InputManager>
if(m_CommandRecord.Count > 10)
m_CommandRecord.RemoveRange(0, m_CommandRecord.Count - 10);
}
- else if(m_CurrentCommand.code != CommandCode.Blank)
+ else if(m_CurrentCommand.code != GamepadButton.Blank)
{
m_CurrentCommand = Command.Blank;
}
}
- string CommandCodeToString(CommandCode cmd)
+ string CommandCodeToString(GamepadButton cmd)
{
switch(cmd)
{
- case CommandCode.Left: return "←";
- case CommandCode.Right: return "→";
- case CommandCode.Up: return "↑";
- case CommandCode.Down: return "↓";
- case CommandCode.Circle: return "○";
- case CommandCode.Triangle: return "△";
- case CommandCode.Square: return "□";
- case CommandCode.Cross: return "×";
+ case GamepadButton.Left: return "←";
+ case GamepadButton.Right: return "→";
+ case GamepadButton.Up: return "↑";
+ case GamepadButton.Down: return "↓";
+ case GamepadButton.Circle: return "○";
+ case GamepadButton.Triangle: return "△";
+ case GamepadButton.Square: return "□";
+ case GamepadButton.Cross: return "×";
default: return "Unknown";
}
}
@@ -85,4 +85,26 @@ public class InputManager : Singleton<InputManager>
return sign + " " + cmd.time + "s" + " " + cmd.id;
}
+ string GetGamepadButtonKey(GamepadButton button)
+ {
+ switch (button)
+ {
+ case GamepadButton.Blank: return "";
+ case GamepadButton.Up: return "w";
+ case GamepadButton.Down: return "s";
+ case GamepadButton.Left: return "a";
+ case GamepadButton.Right: return "d";
+ case GamepadButton.Circle: return "j";
+ case GamepadButton.Triangle: return "k";
+ case GamepadButton.Square: return "l";
+ case GamepadButton.Cross: return "u";
+ }
+ return "";
+ }
+
+ public bool IsButtonHold(GamepadButton button)
+ {
+ return Input.GetKey(GetGamepadButtonKey(button));
+ }
+
}
diff --git a/Assets/Scripts/Test/SaionjiScript.cs b/Assets/Scripts/Test/SaionjiScript.cs
index a7ba6091..871f155f 100644
--- a/Assets/Scripts/Test/SaionjiScript.cs
+++ b/Assets/Scripts/Test/SaionjiScript.cs
@@ -14,6 +14,8 @@ public partial class SaionjiScript : MonoBehaviour
public bool UsePistol;
public bool UseBlade;
+ public bool EnableAbilitySystem;
+
// Start is called before the first frame update
void Start()
{
@@ -25,6 +27,16 @@ public partial class SaionjiScript : MonoBehaviour
Go_PistolR.SetActive(UsePistol);
Go_Blade.SetActive(UseBlade);
+ GetAnimHash();
+
+ if (EnableAbilitySystem)
+ SetupAbilities();
+ }
+
+ private void Update()
+ {
+ if (EnableAbilitySystem)
+ m_AbilitySystem.OnUpdate();
}
// 更新顺序:
diff --git a/Assets/Scripts/Test/SaionjiScript_Ability.cs b/Assets/Scripts/Test/SaionjiScript_Ability.cs
index 4b8f4693..1b248751 100644
--- a/Assets/Scripts/Test/SaionjiScript_Ability.cs
+++ b/Assets/Scripts/Test/SaionjiScript_Ability.cs
@@ -24,10 +24,59 @@ public partial class SaionjiScript : MonoBehaviour
/// </summary>
void SetupAbilities()
{
- IdleAbility idleAbility = new IdleAbility(Anim_Idle);
+ IdleAbility idle = new IdleAbility(animator, Anim_Idle);
+ MoveAbility move = new MoveAbility(animator, Anim_Run);
+ AttackAbility attk1 = new AttackAbility(animator, Anim_LightAttack1);
+ AttackAbility attk2 = new AttackAbility(animator, Anim_LightAttack2);
+ AttackAbility attk3 = new AttackAbility(animator, Anim_LightAttack3);
+ AttackAbility attk4 = new AttackAbility(animator, Anim_LightAttack4);
+ AttackAbility attk5 = new AttackAbility(animator, Anim_LightAttack5);
+ ActionSwitchAbility switchToMove = new ActionSwitchAbility(m_AbilitySystem, move);
+ ActionSwitchAbility switchToIdle = new ActionSwitchAbility(m_AbilitySystem, idle);
+ ActionSwitchAbility switchToAttk1 = new ActionSwitchAbility(m_AbilitySystem, attk1);
+ ActionSwitchAbility switchToAttk2 = new ActionSwitchAbility(m_AbilitySystem, attk2);
+ ActionSwitchAbility switchToAttk3 = new ActionSwitchAbility(m_AbilitySystem, attk3);
+ ActionSwitchAbility switchToAttk4 = new ActionSwitchAbility(m_AbilitySystem, attk4);
+ ActionSwitchAbility switchToAttk5 = new ActionSwitchAbility(m_AbilitySystem, attk5);
- m_AbilitySystem.AddAbility(idleAbility);
- }
+ ConditionCommand condRightCmd = new ConditionCommand(GamepadButton.Right);
+ ConditionNoMoveButtonHold condNoMoveButtonHold = new ConditionNoMoveButtonHold();
+ ConditionCommand condCircleCmd = new ConditionCommand(GamepadButton.Circle);
+
+ Trigger trigger = null;
+
+ trigger = new Trigger(condRightCmd, switchToMove);
+ idle.AddTrigger(trigger);
+ trigger = new Trigger(condCircleCmd, switchToAttk1);
+ idle.AddTrigger(trigger);
+
+ trigger = new Trigger(condNoMoveButtonHold, switchToIdle);
+ move.AddTrigger(trigger);
+ trigger = new Trigger(condCircleCmd, switchToAttk1);
+ move.AddTrigger(trigger);
+
+ ConditionAnimAtEnd condAttk1AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack1);
+ trigger = new Trigger(And(condAttk1AtEnd, condCircleCmd), switchToAttk2);
+ attk1.AddTrigger(trigger);
+
+ ConditionAnimAtEnd condAttk2AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack2);
+ trigger = new Trigger(And(condAttk2AtEnd, condCircleCmd), switchToAttk3);
+ attk2.AddTrigger(trigger);
+
+ ConditionAnimAtEnd condAttk3AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack3);
+ trigger = new Trigger(And(condAttk3AtEnd, condCircleCmd), switchToAttk4);
+ attk3.AddTrigger(trigger);
+
+ ConditionAnimAtEnd condAttk4AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack4);
+ trigger = new Trigger(And(condAttk4AtEnd, condCircleCmd), switchToAttk5);
+ attk4.AddTrigger(trigger);
+
+ ConditionAnimAtEnd condAttk5AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack5);
+ trigger = new Trigger(condAttk5AtEnd, switchToIdle);
+ attk5.AddTrigger(trigger);
+
+ m_AbilitySystem.ForceStart(idle);
+ }
} \ No newline at end of file