From 3d3f0b7ede44569ecaab523350feede9fee383c3 Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 26 Oct 2020 08:36:27 +0800 Subject: * ability system --- .../AbilitySystem/Abilities/AttackAbility.cs | 38 +++- .../Scripts/AbilitySystem/Abilities/JumpAbility.cs | 11 ++ .../AbilitySystem/Abilities/JumpAbility.cs.meta | 11 ++ .../AbilitySystem/Actions/ActionEffects.meta | 8 - .../Actions/ActionEffects/ActionDisableGhost.cs | 19 -- .../ActionEffects/ActionDisableGhost.cs.meta | 11 -- .../Actions/ActionEffects/ActionEffectGhost.cs | 19 -- .../ActionEffects/ActionEffectGhost.cs.meta | 11 -- .../AbilitySystem/Actions/ActionPositionAdd.cs | 18 ++ .../Actions/ActionPositionAdd.cs.meta | 11 ++ .../AbilitySystem/Actions/ActionSetFeetPosition.cs | 18 ++ .../Actions/ActionSetFeetPosition.cs.meta | 11 ++ .../AbilitySystem/Actions/ActionSetPosition.cs | 18 ++ .../Actions/ActionSetPosition.cs.meta | 11 ++ .../AbilitySystem/Actions/ActionSetVelocity.cs | 21 ++ .../Actions/ActionSetVelocity.cs.meta | 11 ++ .../AbilitySystem/Actions/CameraActions.meta | 8 + .../Actions/CameraActions/ActionMoveCamera.cs | 18 ++ .../Actions/CameraActions/ActionMoveCamera.cs.meta | 11 ++ .../Actions/CameraActions/ActionPauseTime.cs | 18 ++ .../Actions/CameraActions/ActionPauseTime.cs.meta | 11 ++ .../AbilitySystem/Actions/EffectActions.meta | 8 + .../Actions/EffectActions/ActionDisableGhost.cs | 19 ++ .../EffectActions/ActionDisableGhost.cs.meta | 11 ++ .../Actions/EffectActions/ActionEffectGhost.cs | 19 ++ .../EffectActions/ActionEffectGhost.cs.meta | 11 ++ .../Scripts/AbilitySystem/Actions/UberActions.meta | 8 + .../Actions/UberActions/ActionUber.cs | 18 ++ .../Actions/UberActions/ActionUber.cs.meta | 11 ++ .../Scripts/AbilitySystem/Conditions/Camera.meta | 8 + .../AbilitySystem/Conditions/ConditionAnimAtEnd.cs | 31 --- .../Conditions/ConditionAnimAtEnd.cs.meta | 11 -- .../Conditions/ConditionAnimFrameRange.cs | 18 -- .../Conditions/ConditionAnimFrameRange.cs.meta | 11 -- .../AbilitySystem/Conditions/ConditionAnimRange.cs | 28 --- .../Conditions/ConditionAnimRange.cs.meta | 11 -- .../AbilitySystem/Conditions/ConditionCombo.cs | 2 +- .../AbilitySystem/Conditions/ConditionInair.cs | 9 +- .../Conditions/ConditionMotionAtEnd.cs | 31 +++ .../Conditions/ConditionMotionAtEnd.cs.meta | 11 ++ .../Conditions/ConditionMotionFrameRange.cs | 18 ++ .../Conditions/ConditionMotionFrameRange.cs.meta | 11 ++ .../Conditions/ConditionMotionRange.cs | 28 +++ .../Conditions/ConditionMotionRange.cs.meta | 11 ++ Assets/Scripts/AbilitySystem/Trigger.cs | 30 ++- Assets/Scripts/Physics/PhysicsBody.cs | 18 +- Assets/Scripts/Physics/PhysicsPrimitive.cs | 214 ++++++++++++--------- Assets/Scripts/Physics/PhysicsWorld.cs | 17 +- Assets/Scripts/Test/SaionjiScript_Ability.cs | 80 +++++--- Assets/Scripts/Test/SaionjiScript_Physics.cs | 25 ++- 50 files changed, 712 insertions(+), 329 deletions(-) create mode 100644 Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs create mode 100644 Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs.meta delete mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionEffects.meta delete mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionDisableGhost.cs delete mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionDisableGhost.cs.meta delete mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionEffectGhost.cs delete mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionEffectGhost.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionPositionAdd.cs create mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionPositionAdd.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionSetFeetPosition.cs create mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionSetFeetPosition.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs create mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionSetVelocity.cs create mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionSetVelocity.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Actions/CameraActions.meta create mode 100644 Assets/Scripts/AbilitySystem/Actions/CameraActions/ActionMoveCamera.cs create mode 100644 Assets/Scripts/AbilitySystem/Actions/CameraActions/ActionMoveCamera.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Actions/CameraActions/ActionPauseTime.cs create mode 100644 Assets/Scripts/AbilitySystem/Actions/CameraActions/ActionPauseTime.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Actions/EffectActions.meta create mode 100644 Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionDisableGhost.cs create mode 100644 Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionDisableGhost.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionEffectGhost.cs create mode 100644 Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionEffectGhost.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Actions/UberActions.meta create mode 100644 Assets/Scripts/AbilitySystem/Actions/UberActions/ActionUber.cs create mode 100644 Assets/Scripts/AbilitySystem/Actions/UberActions/ActionUber.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Conditions/Camera.meta delete mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs delete mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs.meta delete mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionAnimFrameRange.cs delete mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionAnimFrameRange.cs.meta delete mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs delete mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionMotionAtEnd.cs create mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionMotionAtEnd.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionMotionFrameRange.cs create mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionMotionFrameRange.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionMotionRange.cs create mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionMotionRange.cs.meta (limited to 'Assets/Scripts') diff --git a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs index fc4ce7e1..7b178621 100644 --- a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs +++ b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs @@ -2,11 +2,18 @@ using System.Collections.Generic; using UnityEngine; +public struct AttackAbilityConfig +{ + public Vector3 velocity; // velocity setup + public int motion; + public Animator animator; + public PhysicsBody body; +} + // 单独的一个招式 public class AttackAbility : AbilityBase { - Animator m_Animator; - int m_AnimHash; + AttackAbilityConfig m_Config = new AttackAbilityConfig(); /// /// 在跑动状态时可以切换的ability @@ -27,15 +34,21 @@ public class AttackAbility : AbilityBase } } - public AttackAbility(Animator animator, int animation) + public AttackAbility(Animator animator, int animation, PhysicsBody body = null) { - m_Animator = animator; - m_AnimHash = animation; + m_Config.animator = animator; + m_Config.motion = animation; + m_Config.velocity = Vector3.zero; + m_Config.body = body; } - public override void OnInit() + public AttackAbility(AttackAbilityConfig config) { + m_Config = config; + } + public override void OnInit() + { } public override void OnDefend() @@ -46,8 +59,13 @@ public class AttackAbility : AbilityBase public override void OnEnter() { m_TimeCount = 0; - // 招式不要有过渡时间 - m_Animator.CrossFade(m_AnimHash, 0); + + m_Config.animator.CrossFade(m_Config.motion, 0); + + if(m_Config.body != null) + { + m_Config.body.Velocity = m_Config.velocity; + } } public override void OnExit() @@ -69,8 +87,8 @@ public class AttackAbility : AbilityBase public override void OnUpdate() { - AnimatorStateInfo info = m_Animator.GetCurrentAnimatorStateInfo(0); - if(info.shortNameHash == m_AnimHash && info.normalizedTime >= 0.99f) + AnimatorStateInfo info = m_Config.animator.GetCurrentAnimatorStateInfo(0); + if(info.shortNameHash == m_Config.motion && info.normalizedTime >= 0.99f) { m_TimeCount += Time.deltaTime; } diff --git a/Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs new file mode 100644 index 00000000..4b8e5381 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs @@ -0,0 +1,11 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class JumpAbility : AbilityBase +{ + Animator m_Animator; + + + +} \ No newline at end of file diff --git a/Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs.meta b/Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs.meta new file mode 100644 index 00000000..6c67c462 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed5b337c63528354f8b4f2ba0a59481d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: 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/ActionEffects/ActionDisableGhost.cs b/Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionDisableGhost.cs deleted file mode 100644 index 2da01daf..00000000 --- a/Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionDisableGhost.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -// 残影特效 -public class ActionDisableGhost : ActionBase -{ - CharacterGhostEffect m_GhostEffect; - - public ActionDisableGhost(CharacterGhostEffect effect) - { - m_GhostEffect = effect; - } - - public override void Execute() - { - m_GhostEffect.IsEnable = false; - } -} diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionDisableGhost.cs.meta b/Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionDisableGhost.cs.meta deleted file mode 100644 index 185da50b..00000000 --- a/Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionDisableGhost.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8548d7836b8033643954ca68cc3a5948 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionEffectGhost.cs b/Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionEffectGhost.cs deleted file mode 100644 index 05d3a1a5..00000000 --- a/Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionEffectGhost.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -// 残影特效 -public class ActionEffectGhost : ActionBase -{ - CharacterGhostEffect m_GhostEffect; - - public ActionEffectGhost(CharacterGhostEffect effect) - { - m_GhostEffect = effect; - } - - public override void Execute() - { - m_GhostEffect.IsEnable = true; - } -} diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionEffectGhost.cs.meta b/Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionEffectGhost.cs.meta deleted file mode 100644 index 6a55db7d..00000000 --- a/Assets/Scripts/AbilitySystem/Actions/ActionEffects/ActionEffectGhost.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 68cbffdb70cd84041b2aa7b2134a10e8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionPositionAdd.cs b/Assets/Scripts/AbilitySystem/Actions/ActionPositionAdd.cs new file mode 100644 index 00000000..9db10173 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/ActionPositionAdd.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ActionPosAdd : 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/Actions/ActionPositionAdd.cs.meta b/Assets/Scripts/AbilitySystem/Actions/ActionPositionAdd.cs.meta new file mode 100644 index 00000000..209f3795 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/ActionPositionAdd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc9cfba8e327546488ec1c83add3e127 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionSetFeetPosition.cs b/Assets/Scripts/AbilitySystem/Actions/ActionSetFeetPosition.cs new file mode 100644 index 00000000..8869801d --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/ActionSetFeetPosition.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ActionSetFeetPosition : 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/Actions/ActionSetFeetPosition.cs.meta b/Assets/Scripts/AbilitySystem/Actions/ActionSetFeetPosition.cs.meta new file mode 100644 index 00000000..87656dc0 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/ActionSetFeetPosition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da4e331f7a5282e4ca369384e69e98a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs b/Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs new file mode 100644 index 00000000..913eb3d2 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ActionSetPosition : 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/Actions/ActionSetPosition.cs.meta b/Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs.meta new file mode 100644 index 00000000..466f5692 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6125833c9bb56f546bbd74cb0c7c32b3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionSetVelocity.cs b/Assets/Scripts/AbilitySystem/Actions/ActionSetVelocity.cs new file mode 100644 index 00000000..3289ac81 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/ActionSetVelocity.cs @@ -0,0 +1,21 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ActionSetVelocity : ActionBase +{ + PhysicsBody m_Body; + + Vector3 m_Velocity; + + public ActionSetVelocity(PhysicsBody body, Vector3 velocity) + { + m_Body = body; + m_Velocity = velocity; + } + + public override void Execute() + { + m_Body.Velocity = m_Velocity; + } +} diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionSetVelocity.cs.meta b/Assets/Scripts/AbilitySystem/Actions/ActionSetVelocity.cs.meta new file mode 100644 index 00000000..3f677ed0 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/ActionSetVelocity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0334529cb8b95d5449a4d50a41099c0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Actions/CameraActions.meta b/Assets/Scripts/AbilitySystem/Actions/CameraActions.meta new file mode 100644 index 00000000..a4650ff8 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/CameraActions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7d30a503b2bf1b04284baaadbf080a1f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Actions/CameraActions/ActionMoveCamera.cs b/Assets/Scripts/AbilitySystem/Actions/CameraActions/ActionMoveCamera.cs new file mode 100644 index 00000000..e35d43ad --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/CameraActions/ActionMoveCamera.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ActionMoveCamera : 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/Actions/CameraActions/ActionMoveCamera.cs.meta b/Assets/Scripts/AbilitySystem/Actions/CameraActions/ActionMoveCamera.cs.meta new file mode 100644 index 00000000..3812e732 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/CameraActions/ActionMoveCamera.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67f15f0e55848fe4187e667a2e3e7d76 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Actions/CameraActions/ActionPauseTime.cs b/Assets/Scripts/AbilitySystem/Actions/CameraActions/ActionPauseTime.cs new file mode 100644 index 00000000..5a22bc1e --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/CameraActions/ActionPauseTime.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ActionPauseTime : 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/Actions/CameraActions/ActionPauseTime.cs.meta b/Assets/Scripts/AbilitySystem/Actions/CameraActions/ActionPauseTime.cs.meta new file mode 100644 index 00000000..5cca5838 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/CameraActions/ActionPauseTime.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f2e2377ca8624a4097987aa981db53d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Actions/EffectActions.meta b/Assets/Scripts/AbilitySystem/Actions/EffectActions.meta new file mode 100644 index 00000000..17a426dd --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/EffectActions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b5ccfefc2e6b104a8566f4da9a16c5f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionDisableGhost.cs b/Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionDisableGhost.cs new file mode 100644 index 00000000..2da01daf --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionDisableGhost.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +// 残影特效 +public class ActionDisableGhost : ActionBase +{ + CharacterGhostEffect m_GhostEffect; + + public ActionDisableGhost(CharacterGhostEffect effect) + { + m_GhostEffect = effect; + } + + public override void Execute() + { + m_GhostEffect.IsEnable = false; + } +} diff --git a/Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionDisableGhost.cs.meta b/Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionDisableGhost.cs.meta new file mode 100644 index 00000000..185da50b --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionDisableGhost.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8548d7836b8033643954ca68cc3a5948 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionEffectGhost.cs b/Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionEffectGhost.cs new file mode 100644 index 00000000..fa2d8e74 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionEffectGhost.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +// 残影特效 +public class ActionEffectGhost : ActionBase +{ + CharacterGhostEffect m_GhostEffect; + + public ActionEffectGhost(CharacterGhostEffect effect) + { + m_GhostEffect = effect; + } + + public override void Execute() + { + m_GhostEffect.IsEnable = true; + } +} diff --git a/Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionEffectGhost.cs.meta b/Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionEffectGhost.cs.meta new file mode 100644 index 00000000..6a55db7d --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/EffectActions/ActionEffectGhost.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68cbffdb70cd84041b2aa7b2134a10e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Actions/UberActions.meta b/Assets/Scripts/AbilitySystem/Actions/UberActions.meta new file mode 100644 index 00000000..c2620d0e --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/UberActions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 74422fa2d75a19040b26845660f7b51b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Actions/UberActions/ActionUber.cs b/Assets/Scripts/AbilitySystem/Actions/UberActions/ActionUber.cs new file mode 100644 index 00000000..b62d3b37 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/UberActions/ActionUber.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ActionUber : 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/Actions/UberActions/ActionUber.cs.meta b/Assets/Scripts/AbilitySystem/Actions/UberActions/ActionUber.cs.meta new file mode 100644 index 00000000..69d003aa --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/UberActions/ActionUber.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5986fb71b8f521d4c9bffe103916f1c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: 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/ConditionAnimAtEnd.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs deleted file mode 100644 index cfdcfab5..00000000 --- a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -/// -/// 动画已经播放完毕 -/// -public class ConditionAnimAtEnd : ConditionBase -{ - Animator m_Animator; - int m_AnimationHash; - - public ConditionAnimAtEnd(Animator animator, int animationHash) - : base() - { - m_Animator = animator; - m_AnimationHash = animationHash; - } - - public override bool Evaluate() - { - AnimatorStateInfo info = m_Animator.GetCurrentAnimatorStateInfo(0); - if(info.shortNameHash == m_AnimationHash) - { - float t = info.normalizedTime; - if (t >= 0.99f) - return true; - } - return false; - } -} diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs.meta b/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs.meta deleted file mode 100644 index 1688dd68..00000000 --- a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f5cbdf2ebe12b5d46afa21a62609d15c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimFrameRange.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimFrameRange.cs deleted file mode 100644 index 282ef929..00000000 --- a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimFrameRange.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class ConditionAnimFrameRange : 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/ConditionAnimFrameRange.cs.meta b/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimFrameRange.cs.meta deleted file mode 100644 index 3fc88fb1..00000000 --- a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimFrameRange.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 28e7aa2c7b5a9d74b936ec5731eeec36 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs deleted file mode 100644 index b8f98065..00000000 --- a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -/// -/// 某个动画是否播放到了某个时间(归一化了的)范围内 -/// -public sealed class ConditionAnimRange : ConditionBase -{ - Vector2 m_TimeRange = new Vector2(); - Animator m_Animator; - - public ConditionAnimRange(Animator animator, float start, float end) - { - m_Animator = animator; - - m_TimeRange.Set(start, end); - } - - public override bool Evaluate() - { - AnimatorStateInfo info = m_Animator.GetCurrentAnimatorStateInfo(0); - float time = info.normalizedTime; - bool result = time >= m_TimeRange.x && time <= m_TimeRange.y; - return result; - } - -} diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs.meta b/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs.meta deleted file mode 100644 index 926a8560..00000000 --- a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 56b6b5bfaf0d4e147a2f0f1809e7739b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionCombo.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionCombo.cs index 7664a891..1b6159cb 100644 --- a/Assets/Scripts/AbilitySystem/Conditions/ConditionCombo.cs +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionCombo.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using UnityEngine; /// -/// 连击操作,综合ConditionAnimRange和ConditionCommand +/// 连击操作,综合ConditionMotionRange和ConditionCommand /// public class ConditionCombo : ConditionBase { diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionInair.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionInair.cs index 80bae491..2c631970 100644 --- a/Assets/Scripts/AbilitySystem/Conditions/ConditionInair.cs +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionInair.cs @@ -7,8 +7,15 @@ using UnityEngine; /// public class ConditionInAir : ConditionBase { + PhysicsPrimitive m_Prim; + + public ConditionInAir(PhysicsPrimitive prim) + { + m_Prim = prim; + } + public override bool Evaluate() { - return false; + return m_Prim.Bound.w > PhysicsWorld.Ground; } } diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionAtEnd.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionAtEnd.cs new file mode 100644 index 00000000..18d71e86 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionAtEnd.cs @@ -0,0 +1,31 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 动画已经播放完毕 +/// +public class ConditionMotionAtEnd : ConditionBase +{ + Animator m_Animator; + int m_AnimationHash; + + public ConditionMotionAtEnd(Animator animator, int animationHash) + : base() + { + m_Animator = animator; + m_AnimationHash = animationHash; + } + + public override bool Evaluate() + { + AnimatorStateInfo info = m_Animator.GetCurrentAnimatorStateInfo(0); + if(info.shortNameHash == m_AnimationHash) + { + float t = info.normalizedTime; + if (t >= 0.99f) + return true; + } + return false; + } +} diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionAtEnd.cs.meta b/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionAtEnd.cs.meta new file mode 100644 index 00000000..1688dd68 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionAtEnd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5cbdf2ebe12b5d46afa21a62609d15c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionFrameRange.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionFrameRange.cs new file mode 100644 index 00000000..282ef929 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionFrameRange.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ConditionAnimFrameRange : 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/ConditionMotionFrameRange.cs.meta b/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionFrameRange.cs.meta new file mode 100644 index 00000000..3fc88fb1 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionFrameRange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28e7aa2c7b5a9d74b936ec5731eeec36 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionRange.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionRange.cs new file mode 100644 index 00000000..c902ae26 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionRange.cs @@ -0,0 +1,28 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 某个动画是否播放到了某个时间(归一化了的)范围内 +/// +public sealed class ConditionMotionRange : ConditionBase +{ + Vector2 m_TimeRange = new Vector2(); + Animator m_Animator; + + public ConditionMotionRange(Animator animator, float start, float end) + { + m_Animator = animator; + + m_TimeRange.Set(start, end); + } + + public override bool Evaluate() + { + AnimatorStateInfo info = m_Animator.GetCurrentAnimatorStateInfo(0); + float time = info.normalizedTime; + bool result = time >= m_TimeRange.x && time <= m_TimeRange.y; + return result; + } + +} diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionRange.cs.meta b/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionRange.cs.meta new file mode 100644 index 00000000..926a8560 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionMotionRange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56b6b5bfaf0d4e147a2f0f1809e7739b +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 dc173a6d..70a6d0f4 100644 --- a/Assets/Scripts/AbilitySystem/Trigger.cs +++ b/Assets/Scripts/AbilitySystem/Trigger.cs @@ -2,26 +2,46 @@ using System.Collections.Generic; using UnityEngine; +public enum TriggerOnlyOnce +{ + Off = 0, + On = 1, +} + +public enum TriggerSwallow +{ + Off = 0, + On = 1 +} + + /// /// 不同效果的trigger继承这个基类 /// public sealed class Trigger { - public bool Swallow; + private TriggerSwallow m_Swallow; + public bool Swallow + { + get + { + return m_Swallow == TriggerSwallow.On; + } + } private ConditionBase m_Condition; private List m_ActionChain = new List(); - public Trigger(ConditionBase condition, List actions, bool onlyOnce = false, bool swallow = true) + public Trigger(ConditionBase condition, List actions, TriggerOnlyOnce onlyOnce = TriggerOnlyOnce.Off, TriggerSwallow swallow = TriggerSwallow.On) { - Swallow = swallow; + m_Swallow = swallow; m_Condition = condition; m_ActionChain.AddRange(actions); } - public Trigger(ConditionBase condition, ActionBase action, bool onlyOnce = false, bool swallow = true) + public Trigger(ConditionBase condition, ActionBase action, TriggerOnlyOnce onlyOnce = TriggerOnlyOnce.Off, TriggerSwallow swallow = TriggerSwallow.On) { - Swallow = swallow; + m_Swallow = swallow; m_Condition = condition; m_ActionChain.Add(action); } diff --git a/Assets/Scripts/Physics/PhysicsBody.cs b/Assets/Scripts/Physics/PhysicsBody.cs index 84a5fcb0..8fc33fa7 100644 --- a/Assets/Scripts/Physics/PhysicsBody.cs +++ b/Assets/Scripts/Physics/PhysicsBody.cs @@ -45,6 +45,7 @@ public sealed class PhysicsBody : MonoBehaviour } } + [Tooltip("ignore gravity?")] [SerializeField] private bool m_UseGravity; public bool UseGravity @@ -69,11 +70,26 @@ public sealed class PhysicsBody : MonoBehaviour } } - [Tooltip("摩擦力")] + [Tooltip("摩擦系数")] [SerializeField] private float m_Frication; + [Tooltip("力")] + [SerializeField] + private Vector3 m_Force; + [SerializeField] private PhysicsPrimitive m_Primitive; + + public void AddForce(Vector3 force) + { + m_Force += force; + } + + public void SetForce(Vector3 force) + { + m_Force = force; + } + } diff --git a/Assets/Scripts/Physics/PhysicsPrimitive.cs b/Assets/Scripts/Physics/PhysicsPrimitive.cs index f52fb9e9..491a6204 100644 --- a/Assets/Scripts/Physics/PhysicsPrimitive.cs +++ b/Assets/Scripts/Physics/PhysicsPrimitive.cs @@ -15,76 +15,76 @@ public enum PrimitiveType /// public abstract class PhysicsPrimitive : MonoBehaviour { - public virtual PrimitiveType Type - { - get - { - return PrimitiveType.None; - } - } - - /// - /// 世界坐标,物理模拟是在世界空间,本地坐标没有意义 - /// - public Vector3 Position - { - get - { + public virtual PrimitiveType Type + { + get + { + return PrimitiveType.None; + } + } + + /// + /// 世界坐标,物理模拟是在世界空间,本地坐标没有意义 + /// + public Vector3 Position + { + get + { Vector3 euler = Quaternion.ToEulerAngles(transform.rotation); euler.y = Mathf.Rad2Deg * euler.y; Vector3 res = m_Center; res.x = (euler.y > 90 && euler.y <= 180) ? -res.x : res.x; res = transform.position + res; - return res; - } - } - - [SerializeField] - /// - /// 这个primitive是否参与物理计算,用来快速给物体取消和恢复重力影响 - /// - protected bool m_IsActive; - public bool IsActive - { - get - { - return m_IsActive; - } - } - - /// - /// 唯一ID - /// - protected int m_ID; - public int ID - { - get - { - return m_ID; - } - } + return res; + } + } + + [SerializeField] + /// + /// 这个primitive是否参与物理计算,用来快速给物体取消和恢复重力影响 + /// + protected bool m_IsActive; + public bool IsActive + { + get + { + return m_IsActive; + } + } + + /// + /// 唯一ID + /// + protected int m_ID; + public int ID + { + get + { + return m_ID; + } + } [Tooltip("给primitive分组,决定大组和大组之间是否有碰撞检测")] - [SerializeField] - protected PhysicsGroup m_Group; - public PhysicsGroup Group - { - get - { - return m_Group; - } - } + [SerializeField] + protected PhysicsGroup m_Group; + public PhysicsGroup Group + { + get + { + return m_Group; + } + } [Tooltip("给primitive一个标记,表明它的从属关系。帮助做hitbox和hurtbox")] - [SerializeField] - protected PhysicsTag m_Tag; - public PhysicsTag Tag - { - get - { - return m_Tag; - } - } + [SerializeField] + protected PhysicsTag m_Tag; + public PhysicsTag Tag + { + get + { + return m_Tag; + } + } [Tooltip("同一个标签的没有碰撞检测")] [SerializeField] @@ -99,42 +99,42 @@ public abstract class PhysicsPrimitive : MonoBehaviour [Tooltip("单个碰撞体的描述(名称),作为标识用来识别")] [SerializeField] - protected string m_Title; - public string Title - { - get - { - return m_Title; - } - } - - [SerializeField] - protected string m_Desc; - public string Desc - { - get - { - return m_Desc; - } - } - - /// - /// 初始化,设置一些公共数据 - /// - protected void OnInit() - { - m_ID = UIDManager.Acquire(); + protected string m_Title; + public string Title + { + get + { + return m_Title; + } + } + + [SerializeField] + protected string m_Desc; + public string Desc + { + get + { + return m_Desc; + } + } + + /// + /// 初始化,设置一些公共数据 + /// + protected void OnInit() + { + m_ID = UIDManager.Acquire(); PhysicsWorld.Instance.AddPrimitive(this); - } + } - protected Color Color_Green = new Color(0,1, 0, 0.5f); + protected Color Color_Green = new Color(0, 1, 0, 0.5f); - [SerializeField] - protected Color m_HintColor = new Color(0, 0, 0, 0.5f); + [SerializeField] + protected Color m_HintColor = new Color(0, 0, 0, 0.5f); - [Tooltip("Physics body, leave blank and primitive will be static.")] - [SerializeField] - protected PhysicsBody m_Body; + [Tooltip("Physics body, leave blank and primitive will be static.")] + [SerializeField] + protected PhysicsBody m_Body; public PhysicsBody Body { @@ -149,4 +149,32 @@ public abstract class PhysicsPrimitive : MonoBehaviour /// public Vector3 m_Center; + /// + /// 边界:左、右、上、下 + /// + public Vector4 Bound + { + get + { + Vector4 bound = new Vector4(); + if(this is PhysicsBox) + { + PhysicsBox box = this as PhysicsBox; + bound.x = box.Left; + bound.y = box.Right; + bound.z = box.Top; + bound.w = box.Bottom; + } + else if(this is PhysicsBall) + { + PhysicsBall ball = this as PhysicsBall; + bound.x = ball.Position.x - ball.Radius; + bound.y = ball.Position.x + ball.Radius; + bound.z = ball.Position.y + ball.Radius; + bound.w = ball.Position.y - ball.Radius; + } + return bound; + } + } + } \ No newline at end of file diff --git a/Assets/Scripts/Physics/PhysicsWorld.cs b/Assets/Scripts/Physics/PhysicsWorld.cs index 7994e14b..8d95dff7 100644 --- a/Assets/Scripts/Physics/PhysicsWorld.cs +++ b/Assets/Scripts/Physics/PhysicsWorld.cs @@ -32,7 +32,7 @@ public class PhysicsWorld : Singleton { private int m_UpdateRate = 60; // 重力加速度 - private readonly Vector3 m_Gravity = new Vector3(0, -12f, 0); + private readonly Vector3 m_Gravity = new Vector3(0, -20f, 0); // 当前管理的碰撞体 private List m_Primitives = new List(); private float m_TimeCount; @@ -40,7 +40,7 @@ public class PhysicsWorld : Singleton private const int _ = 0; private readonly int[] m_CollisionTable = { // hurtbox hitBox wall ground prop character -/*character*/ 0, 0, 1, 1, 1, 1, +/*character*/ 0, 0, 1, 1, 1, 0, /*prop */ 0, 0, 1, 1, 0, _, /*ground */ 0, 0, 0, 0, _, _, /*wall */ 0, 0, 0, _, _, _, @@ -54,6 +54,8 @@ public class PhysicsWorld : Singleton private List m_CollisionInfo = new List(); + public const float Ground = 0.1f; + public void Init() { m_TimeCount = Time.time; @@ -218,10 +220,21 @@ public class PhysicsWorld : Singleton position += velocity * dt; body.transform.position = position; + + PhysicsBox box = prim as PhysicsBox; + if(box.Bottom < 0.1f) + { + position.y = 0.1f; + body.transform.position = position; + velocity.y = 0; + body.Velocity = velocity; + } } void SolveCollision(PhysicsPrimitive prim, PhysicsCollisionInfo collision, float dt) { + return; + PhysicsBody body = prim.Body; if (body == null) return; diff --git a/Assets/Scripts/Test/SaionjiScript_Ability.cs b/Assets/Scripts/Test/SaionjiScript_Ability.cs index 2ed956ef..21901096 100644 --- a/Assets/Scripts/Test/SaionjiScript_Ability.cs +++ b/Assets/Scripts/Test/SaionjiScript_Ability.cs @@ -33,21 +33,34 @@ public partial class SaionjiScript : MonoBehaviour // abilities //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// IdleAbility idle = new IdleAbility(animator, Anim_Idle); + MoveAbility move = new MoveAbility(animator, Anim_Run); MoveAbility dash = new MoveAbility(animator, Anim_DashWithSword); - 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); - AttackAbility attkRush = new AttackAbility(animator, Anim_LightAttackRush); - AttackAbility sideKick = new AttackAbility(animator, Anim_SideKick); - AttackAbility sideKickRush = new AttackAbility(animator, Anim_SideKickRush); - AttackAbility superKick = new AttackAbility(animator, Anim_SuperKick); - AttackAbility gun1 = new AttackAbility(animator, Anim_Gun1); - AttackAbility gun2 = new AttackAbility(animator, Anim_Gun2); - AttackAbility gun3 = new AttackAbility(animator, Anim_Gun3); - AttackAbility gun4 = new AttackAbility(animator, Anim_Gun4); + + AttackAbilityConfig config; + + //招式会绑定一个motion + AttackAbility attk1 = new AttackAbility(animator, Anim_LightAttack1, m_Body); + AttackAbility attk2 = new AttackAbility(animator, Anim_LightAttack2, m_Body); + AttackAbility attk3 = new AttackAbility(animator, Anim_LightAttack3, m_Body); + AttackAbility attk4 = new AttackAbility(animator, Anim_LightAttack4, m_Body); + AttackAbility attk5 = new AttackAbility(animator, Anim_LightAttack5, m_Body); + AttackAbility attkRush = new AttackAbility(animator, Anim_LightAttackRush, m_Body); + + config = new AttackAbilityConfig() { + animator = this.animator, + body = this.m_Body, + motion = Anim_SideKick, + velocity = new Vector3(20, 1.5f, 0) + }; + AttackAbility sideKick = new AttackAbility(config); + + AttackAbility sideKickRush = new AttackAbility(animator, Anim_SideKickRush, m_Body); + AttackAbility superKick = new AttackAbility(animator, Anim_SuperKick, m_Body); + AttackAbility gun1 = new AttackAbility(animator, Anim_Gun1, m_Body); + AttackAbility gun2 = new AttackAbility(animator, Anim_Gun2, m_Body); + AttackAbility gun3 = new AttackAbility(animator, Anim_Gun3, m_Body); + AttackAbility gun4 = new AttackAbility(animator, Anim_Gun4, m_Body); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // actions @@ -155,16 +168,16 @@ public partial class SaionjiScript : MonoBehaviour move.AddTrigger(trigger); // dash ability - trigger = new Trigger(And(new ConditionAnimRange(animator, 0.5f, 1.0f), condCircleCmd), switchToAttk1); + trigger = new Trigger(And(new ConditionMotionRange(animator, 0.5f, 1.0f), condCircleCmd), switchToAttk1); dash.AddTrigger(trigger); - trigger = new Trigger(new ConditionAnimAtEnd(animator, Anim_DashWithSword), switchToIdle); + trigger = new Trigger(new ConditionMotionAtEnd(animator, Anim_DashWithSword), switchToIdle); dash.AddTrigger(trigger); // attack abilities float expireTime = 0.3f; // sword normal attack - ConditionAnimAtEnd condAttk1AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack1); + ConditionMotionAtEnd condAttk1AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack1); trigger = new Trigger(And(condAttk1AtEnd, condCircleCmd), switchToAttk2); attk1.AddTrigger(trigger); ConditionAttkExpireTime condAttk1ExpireTime = new ConditionAttkExpireTime(attk1, expireTime); @@ -175,13 +188,13 @@ public partial class SaionjiScript : MonoBehaviour trigger = new Trigger(condIsHit, new ActionLog("hit!!!")); attk1.AddLateTrigger(trigger); - //ConditionAnimRange condAttkRushGhostRange = new ConditionAnimRange(animator, 0f, 0.8f); + //ConditionMotionRange condAttkRushGhostRange = new ConditionMotionRange(animator, 0f, 0.8f); //trigger = new Trigger(condAttkRushGhostRange, enableGhost, false); //attkRush.AddTrigger(trigger); - //ConditionAnimRange condAttkRushGhostDisableRange = new ConditionAnimRange(animator, 0.8f, 10f); + //ConditionMotionRange condAttkRushGhostDisableRange = new ConditionMotionRange(animator, 0.8f, 10f); //trigger = new Trigger(condAttkRushGhostDisableRange, disableGhost, false); //attkRush.AddTrigger(trigger); - ConditionAnimRange condAttkRushAtRange = new ConditionAnimRange(animator, 0.5f, 1f); + ConditionMotionRange condAttkRushAtRange = new ConditionMotionRange(animator, 0.5f, 1f); trigger = new Trigger(And(condAttkRushAtRange, condCircleCmd), switchToAttk2); attkRush.AddTrigger(trigger); //trigger = new Trigger(And(And(condAttkRushAtRange, condTowardRight), condRightCmd), switchToAttkRush); @@ -194,7 +207,7 @@ public partial class SaionjiScript : MonoBehaviour //attkRush.AddTrigger(triggerTurnRight); //attkRush.AddTrigger(triggerTurnLeft); - ConditionAnimAtEnd condAttk2AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack2); + ConditionMotionAtEnd condAttk2AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack2); trigger = new Trigger(And(condAttk2AtEnd, condCircleCmd), switchToAttk3); attk2.AddTrigger(trigger); ConditionAttkExpireTime condAttk2ExpireTime = new ConditionAttkExpireTime(attk2, expireTime); @@ -203,7 +216,7 @@ public partial class SaionjiScript : MonoBehaviour attk2.AddTrigger(triggerTurnRight); attk2.AddTrigger(triggerTurnLeft); - ConditionAnimAtEnd condAttk3AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack3); + ConditionMotionAtEnd condAttk3AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack3); trigger = new Trigger(And(condAttk3AtEnd, condCircleCmd), switchToAttk4); attk3.AddTrigger(trigger); ConditionAttkExpireTime condAttk3ExpireTime = new ConditionAttkExpireTime(attk3, expireTime); @@ -212,7 +225,7 @@ public partial class SaionjiScript : MonoBehaviour attk3.AddTrigger(triggerTurnRight); attk3.AddTrigger(triggerTurnLeft); - ConditionAnimAtEnd condAttk4AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack4); + ConditionMotionAtEnd condAttk4AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack4); trigger = new Trigger(And(condAttk4AtEnd, condCircleCmd), switchToAttk5); attk4.AddTrigger(trigger); ConditionAttkExpireTime condAttk4ExpireTime = new ConditionAttkExpireTime(attk4, expireTime); @@ -221,7 +234,7 @@ public partial class SaionjiScript : MonoBehaviour attk4.AddTrigger(triggerTurnRight); attk4.AddTrigger(triggerTurnLeft); - ConditionAnimAtEnd condAttk5AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack5); + ConditionMotionAtEnd condAttk5AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack5); trigger = new Trigger(condAttk5AtEnd, switchToIdle); attk5.AddTrigger(trigger); ConditionAttkExpireTime condAttk5ExpireTime = new ConditionAttkExpireTime(attk5, expireTime); @@ -231,6 +244,9 @@ public partial class SaionjiScript : MonoBehaviour attk5.AddTrigger(triggerTurnLeft); // side kick normal + ConditionMotionAtEnd condKickMotionEnd = new ConditionMotionAtEnd(animator, Anim_SideKick); + trigger = new Trigger(condKickMotionEnd, new ActionSetVelocity(m_Body, Vector3.zero), TriggerOnlyOnce.On, TriggerSwallow.Off); + sideKick.AddTrigger(trigger); ConditionAttkExpireTime condSideKickExpireTime = new ConditionAttkExpireTime(sideKick, expireTime); trigger = new Trigger(condSideKickExpireTime, switchToIdle); sideKick.AddTrigger(trigger); @@ -239,10 +255,10 @@ public partial class SaionjiScript : MonoBehaviour ConditionAttkExpireTime condSideKickRushExpireTime = new ConditionAttkExpireTime(sideKickRush, expireTime); trigger = new Trigger(condSideKickRushExpireTime, switchToIdle); sideKickRush.AddTrigger(trigger); - ConditionAnimRange condSideKickRushAnimRange = new ConditionAnimRange(animator, 0.5f, 10f); - trigger = new Trigger(And(condSideKickRushAnimRange, And(condRightButtonHold, condCircleCmd)), new List { towardRight, switchToAttkRush }); + ConditionMotionRange condSideKickRushMotionRange = new ConditionMotionRange(animator, 0.5f, 10f); + trigger = new Trigger(And(condSideKickRushMotionRange, And(condRightButtonHold, condCircleCmd)), new List { towardRight, switchToAttkRush }); sideKickRush.AddTrigger(trigger); - trigger = new Trigger(And(condSideKickRushAnimRange, And(condLeftButtonHold, condCircleCmd)), new List { towardLeft, switchToAttkRush }); + trigger = new Trigger(And(condSideKickRushMotionRange, And(condLeftButtonHold, condCircleCmd)), new List { towardLeft, switchToAttkRush }); sideKickRush.AddTrigger(trigger); // super kick combo @@ -251,21 +267,21 @@ public partial class SaionjiScript : MonoBehaviour superKick.AddTrigger(trigger); // gun normal - ConditionAnimAtEnd condGun1AtEnd = new ConditionAnimAtEnd(animator, Anim_Gun1); + ConditionMotionAtEnd condGun1AtEnd = new ConditionMotionAtEnd(animator, Anim_Gun1); trigger = new Trigger(And(condGun1AtEnd, condSquareCmd), switchToGun2); gun1.AddTrigger(trigger); ConditionAttkExpireTime condGun1ExpireTime = new ConditionAttkExpireTime(gun1, expireTime); trigger = new Trigger(condGun1ExpireTime, switchToIdle); gun1.AddTrigger(trigger); - ConditionAnimAtEnd condGun2AtEnd = new ConditionAnimAtEnd(animator, Anim_Gun2); + ConditionMotionAtEnd condGun2AtEnd = new ConditionMotionAtEnd(animator, Anim_Gun2); trigger = new Trigger(And(condGun2AtEnd, condSquareCmd), switchToGun3); gun2.AddTrigger(trigger); ConditionAttkExpireTime condGun2ExpireTime = new ConditionAttkExpireTime(gun2, expireTime); trigger = new Trigger(condGun2ExpireTime, switchToIdle); gun2.AddTrigger(trigger); - ConditionAnimAtEnd condGun3AtEnd = new ConditionAnimAtEnd(animator, Anim_Gun3); + ConditionMotionAtEnd condGun3AtEnd = new ConditionMotionAtEnd(animator, Anim_Gun3); trigger = new Trigger(And(condGun3AtEnd, condSquareCmd), switchToGun4); gun3.AddTrigger(trigger); ConditionAttkExpireTime condGun3ExpireTime = new ConditionAttkExpireTime(gun3, expireTime); @@ -275,10 +291,10 @@ public partial class SaionjiScript : MonoBehaviour ConditionAttkExpireTime condGun4ExpireTime = new ConditionAttkExpireTime(gun4, expireTime); trigger = new Trigger(condGun4ExpireTime, switchToIdle); gun4.AddTrigger(trigger); - ConditionAnimRange condGun4AnimRange = new ConditionAnimRange(animator, 0.6f, 1f); - trigger = new Trigger(And(condGun4AnimRange, condRight2Cmd), new List { switchToDash, towardRight }); + ConditionMotionRange condGun4MotionRange = new ConditionMotionRange(animator, 0.6f, 1f); + trigger = new Trigger(And(condGun4MotionRange, condRight2Cmd), new List { switchToDash, towardRight }); gun4.AddTrigger(trigger); - trigger = new Trigger(And(condGun4AnimRange, condLeft2Cmd), new List { switchToDash, towardLeft }); + trigger = new Trigger(And(condGun4MotionRange, condLeft2Cmd), new List { switchToDash, towardLeft }); gun4.AddTrigger(trigger); m_AbilitySystem.ForceStart(idle); diff --git a/Assets/Scripts/Test/SaionjiScript_Physics.cs b/Assets/Scripts/Test/SaionjiScript_Physics.cs index 87794998..99926afe 100644 --- a/Assets/Scripts/Test/SaionjiScript_Physics.cs +++ b/Assets/Scripts/Test/SaionjiScript_Physics.cs @@ -4,8 +4,9 @@ using UnityEngine; public partial class SaionjiScript : MonoBehaviour, IInteractable { - public PhysicsBox m_Hitbox; - public PhysicsBox m_Hurtbox; + public PhysicsBox[] m_Hitbox; + public PhysicsBox[] m_Hurtbox; + public PhysicsBody m_Body; public PhysicsPrimitive[] GetAllPrimitive() { @@ -29,13 +30,25 @@ public partial class SaionjiScript : MonoBehaviour, IInteractable public bool IsHit() { - bool isHit = PhysicsWorld.Instance.HasCollision(m_Hitbox); - return isHit; + for(int i = 0;i < m_Hitbox.Length; ++i) + { + if(PhysicsWorld.Instance.HasCollision(m_Hitbox[i])) + { + return true; + } + } + return false; } public bool IsHurt() { - bool isHurt = PhysicsWorld.Instance.HasCollision(m_Hurtbox); - return isHurt; + for (int i = 0; i < m_Hitbox.Length; ++i) + { + if (PhysicsWorld.Instance.HasCollision(m_Hurtbox[i])) + { + return true; + } + } + return false; } } -- cgit v1.1-26-g67d0