From 3708d0a07ce43c3d98a0171eacfa9c370c873f96 Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 2 Nov 2020 19:53:12 +0800 Subject: =?UTF-8?q?*=E5=8F=97=E5=87=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scripts/ApplicationMain.cs | 4 +- Assets/Scripts/Avatar/Abilities/AbilityBase.cs | 4 +- Assets/Scripts/Avatar/Abilities/AttackAbility.cs | 35 ++++++++++- Assets/Scripts/Avatar/Abilities/MoveAbility.cs | 8 --- Assets/Scripts/Avatar/AbilitySystem.cs | 41 ++++++------- Assets/Scripts/Avatar/Actions/ActionEffects.meta | 8 +++ Assets/Scripts/Avatar/Avatar.cs | 74 +++++++++++++++++++++++- Assets/Scripts/Avatar/HitDefination.cs | 10 ++-- Assets/Scripts/Avatar/HitInfo.cs | 10 +++- Assets/Scripts/Managers.meta | 2 +- Assets/Scripts/Managers/AvatarManager.cs | 30 ++++++++++ Assets/Scripts/Managers/AvatarManager.cs.meta | 11 ++++ Assets/Scripts/Managers/ResourceManager.cs | 18 ++++++ Assets/Scripts/Managers/ResourceManager.cs.meta | 11 ++++ Assets/Scripts/Physics/PhysicsBody.cs | 25 +++++--- Assets/Scripts/Physics/PhysicsHelper.cs | 2 + Assets/Scripts/Physics/PhysicsPrimitive.cs | 8 +++ Assets/Scripts/Physics/PhysicsWorld.cs | 50 +++++++++++++--- Assets/Scripts/Props.meta | 8 +++ Assets/Scripts/Test/ArmorSoldierScript.cs | 28 ++++----- Assets/Scripts/Test/SaionjiScript.cs | 14 +++-- Assets/Scripts/Test/SaionjiScript_Ability.cs | 45 +++++++------- 22 files changed, 345 insertions(+), 101 deletions(-) create mode 100644 Assets/Scripts/Avatar/Actions/ActionEffects.meta create mode 100644 Assets/Scripts/Managers/AvatarManager.cs create mode 100644 Assets/Scripts/Managers/AvatarManager.cs.meta create mode 100644 Assets/Scripts/Managers/ResourceManager.cs create mode 100644 Assets/Scripts/Managers/ResourceManager.cs.meta create mode 100644 Assets/Scripts/Props.meta (limited to 'Assets/Scripts') diff --git a/Assets/Scripts/ApplicationMain.cs b/Assets/Scripts/ApplicationMain.cs index 69791549..99209c50 100644 --- a/Assets/Scripts/ApplicationMain.cs +++ b/Assets/Scripts/ApplicationMain.cs @@ -15,13 +15,13 @@ public class ApplicationMain : MonoBehaviour void Update() { InputManager.Instance.Update(); - AbilitySystem.Update(); + AvatarManager.Instance.OnUpdate(); } private void LateUpdate() { PhysicsWorld.Instance.Update(); - AbilitySystem.LateUpdate(); + AvatarManager.Instance.OnLateUpdate(); } private void OnDrawGizmos() diff --git a/Assets/Scripts/Avatar/Abilities/AbilityBase.cs b/Assets/Scripts/Avatar/Abilities/AbilityBase.cs index 8b1a5549..28f0e8d6 100644 --- a/Assets/Scripts/Avatar/Abilities/AbilityBase.cs +++ b/Assets/Scripts/Avatar/Abilities/AbilityBase.cs @@ -52,12 +52,12 @@ public abstract class AbilityBase /// /// 检测到hitbox碰撞时的回调 /// - public virtual void OnHit() { } + public virtual void OnHit(PhysicsCollisionInfo info) { } /// /// 检测到hurtbox碰撞时的回调 /// - public virtual void OnHurt() { } + public virtual void OnHurt(PhysicsCollisionInfo info) { } /// /// 检测到defendbox碰撞时的回调 diff --git a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs index 117dca7e..38c5d62f 100644 --- a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs +++ b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs @@ -80,6 +80,11 @@ public class AttackAbility : AbilityBase { m_Config.body.LocalVelocity = m_Config.velocity; } + + foreach(var hit in m_HitInfo) + { + hit.WipeRecords(); + } } public override void OnExit() @@ -87,11 +92,30 @@ public class AttackAbility : AbilityBase m_TimeCount = 0; } - public override void OnHit() + public override void OnHit(PhysicsCollisionInfo info) { + Avatar avatar = info.prim2.GetComponentInParent(); + if (avatar == null) + return; + for (int i = 0; i < m_HitInfo.Count; ++i) + { + HitInfo hitInfo = m_HitInfo[i]; + if(!hitInfo.HasRecord(avatar)) + { + hitInfo.AddRecord(avatar); + Debug.Log("hit " + avatar.Name); + PhysicsBody body = avatar.Body; + body.AddForce(new Vector3(3000, 0, 0)); + if(avatar is ArmorSoldierScript) + { + ArmorSoldierScript solider = avatar as ArmorSoldierScript; + solider.Hurt(); + } + } + } } - public override void OnHurt() + public override void OnHurt(PhysicsCollisionInfo info) { } @@ -137,4 +161,11 @@ public class AttackAbility : AbilityBase m_LateTriggers.Add(trigger); } + public void AddHitDefination(HitDefination defination) + { + HitInfo info = new HitInfo(); + info.defination = defination; + m_HitInfo.Add(info); + } + } diff --git a/Assets/Scripts/Avatar/Abilities/MoveAbility.cs b/Assets/Scripts/Avatar/Abilities/MoveAbility.cs index 757cd2d1..cf9fa106 100644 --- a/Assets/Scripts/Avatar/Abilities/MoveAbility.cs +++ b/Assets/Scripts/Avatar/Abilities/MoveAbility.cs @@ -37,14 +37,6 @@ public class MoveAbility : AbilityBase { } - public override void OnHit() - { - } - - public override void OnHurt() - { - } - public override void OnTranslate(AbilityBase to) { } diff --git a/Assets/Scripts/Avatar/AbilitySystem.cs b/Assets/Scripts/Avatar/AbilitySystem.cs index 46156c55..024e73cb 100644 --- a/Assets/Scripts/Avatar/AbilitySystem.cs +++ b/Assets/Scripts/Avatar/AbilitySystem.cs @@ -7,8 +7,6 @@ using UnityEngine; /// public class AbilitySystem { - private static List AbilitySystems = new List(); - /// /// 当前执行的ability /// @@ -26,23 +24,6 @@ public class AbilitySystem public AbilitySystem() { - AbilitySystems.Add(this); - } - - public static void Update() - { - foreach(var systems in AbilitySystems) - { - systems.OnUpdate(); - } - } - - public static void LateUpdate() - { - foreach (var systems in AbilitySystems) - { - systems.OnLateUpdate(); - } } public void ForceStart(AbilityBase ability) @@ -76,10 +57,24 @@ public class AbilitySystem { m_Currrent.OnLateUpdate(); } - } - - - public void SwitchToAbility(AbilityBase targetAbility) + } + + public void OnHit(PhysicsCollisionInfo info) + { + if(m_Currrent != null) + { + m_Currrent.OnHit(info); + } + } + public void OnHurt(PhysicsCollisionInfo info) + { + if (m_Currrent != null) + { + m_Currrent.OnHurt(info); + } + } + + public void SwitchToAbility(AbilityBase targetAbility) { if (m_Currrent != null) m_Currrent.OnExit(); diff --git a/Assets/Scripts/Avatar/Actions/ActionEffects.meta b/Assets/Scripts/Avatar/Actions/ActionEffects.meta new file mode 100644 index 00000000..17a426dd --- /dev/null +++ b/Assets/Scripts/Avatar/Actions/ActionEffects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b5ccfefc2e6b104a8566f4da9a16c5f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Avatar/Avatar.cs b/Assets/Scripts/Avatar/Avatar.cs index 47d8c4b7..a8d90fa7 100644 --- a/Assets/Scripts/Avatar/Avatar.cs +++ b/Assets/Scripts/Avatar/Avatar.cs @@ -8,18 +8,34 @@ using UnityEngine; /// public class Avatar : MonoBehaviour, IInteractable { + public string Name; - + // 一个角色包括一个身体的collider和若干hitbox和hurtbox public PhysicsBody m_Body; public PhysicsBox m_BodyCollider; public PhysicsBox[] m_Hitbox; public PhysicsBox[] m_Hurtbox; + protected AbilitySystem m_AbilitySystem = new AbilitySystem(); + + public PhysicsBody Body + { + get + { + return m_Body; + } + } + public PhysicsPrimitive[] GetAllPrimitive() { throw new System.NotImplementedException(); } + protected void Init() + { + AvatarManager.Instance.AddAvatar(this); + } + public PhysicsBox GetHitbox() { throw new System.NotImplementedException(); @@ -59,4 +75,60 @@ public class Avatar : MonoBehaviour, IInteractable return false; } + public void OnUpdate() + { + m_AbilitySystem.OnUpdate(); + } + + // 在物理模拟之后调用 + public void OnLateUpdate() + { + // hitbox + for(int i = 0;i < m_Hitbox.Length; ++i) + { + PhysicsBox hitbox = m_Hitbox[i]; + if (hitbox == null || !hitbox.IsActive) + continue; + for(int j = 0;j < PhysicsWorld.Instance.Collisions.Count; ++j) + { + PhysicsCollisionInfo info = PhysicsWorld.Instance.Collisions[j]; + if(info.prim1 == hitbox) + { + m_AbilitySystem.OnHit(info); + } + else if(info.prim2 == hitbox) + { + PhysicsPrimitive temp = info.prim1; + info.prim1 = info.prim2; + info.prim2 = temp; + m_AbilitySystem.OnHit(info); + } + } + } + // hurtbox + for (int i = 0; i < m_Hurtbox.Length; ++i) + { + PhysicsBox hurtbox = m_Hurtbox[i]; + if (hurtbox == null || !hurtbox.IsActive) + continue; + for (int j = 0; j < PhysicsWorld.Instance.Collisions.Count; ++j) + { + PhysicsCollisionInfo info = PhysicsWorld.Instance.Collisions[j]; + if (info.prim1 == hurtbox) + { + m_AbilitySystem.OnHurt(info); + } + else if(info.prim2 == hurtbox) + { + PhysicsPrimitive temp = info.prim1; + info.prim1 = info.prim2; + info.prim2 = temp; + m_AbilitySystem.OnHurt(info); + } + } + } + + m_AbilitySystem.OnLateUpdate(); + } + } diff --git a/Assets/Scripts/Avatar/HitDefination.cs b/Assets/Scripts/Avatar/HitDefination.cs index 1f622b32..96ceaf00 100644 --- a/Assets/Scripts/Avatar/HitDefination.cs +++ b/Assets/Scripts/Avatar/HitDefination.cs @@ -8,11 +8,11 @@ public class HitDefination public float start = 0f; public float end = 1f; // 触发的开始和结束时间范围,用来处理一个attack多个hit的情况 - public int effectID = 0; // 特效 - public Transform effectHost = null; // 特效挂点 - public Vector3 effectPosition; // 特效位置(effectHost为空时生效) - public Quaternion effectRotation; // 特效旋转 - public Vector3 effectScale = Vector3.one; // 特效缩放 + public int sparkID = 0; // 特效perfab ID + public Transform sparkHost = null; // 特效挂点 + public Vector3 sparkPosition; // 特效位置(sparkHost为空时生效) + public Quaternion sparkRotation; // 特效旋转 + public Vector3 sparkScale = Vector3.one; // 特效缩放 } \ No newline at end of file diff --git a/Assets/Scripts/Avatar/HitInfo.cs b/Assets/Scripts/Avatar/HitInfo.cs index bdb116eb..8d24f6ee 100644 --- a/Assets/Scripts/Avatar/HitInfo.cs +++ b/Assets/Scripts/Avatar/HitInfo.cs @@ -9,11 +9,11 @@ public class HitInfo /// /// 记录这个hit命中的avatar /// - private List m_HitAvatars; + private List m_HitAvatars = new List(); public void AddRecord(Avatar avatar) { - if (m_HitAvatars.Contains(avatar)) + if (!m_HitAvatars.Contains(avatar)) m_HitAvatars.Add(avatar); } @@ -22,4 +22,10 @@ public class HitInfo { m_HitAvatars.Clear(); } + + public bool HasRecord(Avatar avatar) + { + return m_HitAvatars.Contains(avatar); + } + } diff --git a/Assets/Scripts/Managers.meta b/Assets/Scripts/Managers.meta index 08725b58..42a571fb 100644 --- a/Assets/Scripts/Managers.meta +++ b/Assets/Scripts/Managers.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8fa7e6d20cdfaee42b39f1c7f5b5afd6 +guid: ffa677f9a3f3e5a49be1487a5a522911 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/Managers/AvatarManager.cs b/Assets/Scripts/Managers/AvatarManager.cs new file mode 100644 index 00000000..4cb3cb7f --- /dev/null +++ b/Assets/Scripts/Managers/AvatarManager.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class AvatarManager : Singleton +{ + private List m_Avatars = new List(); + + public void AddAvatar(Avatar avatar) + { + m_Avatars.Add(avatar); + } + + public void OnUpdate() + { + foreach (var avatar in m_Avatars) + { + avatar.OnUpdate(); + } + } + + public void OnLateUpdate() + { + foreach(var avatar in m_Avatars) + { + avatar.OnLateUpdate(); + } + } + +} diff --git a/Assets/Scripts/Managers/AvatarManager.cs.meta b/Assets/Scripts/Managers/AvatarManager.cs.meta new file mode 100644 index 00000000..a130d1a3 --- /dev/null +++ b/Assets/Scripts/Managers/AvatarManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be28f7eef9edbed4ea13fd6f474cacb8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Managers/ResourceManager.cs b/Assets/Scripts/Managers/ResourceManager.cs new file mode 100644 index 00000000..858ad345 --- /dev/null +++ b/Assets/Scripts/Managers/ResourceManager.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ResourceManager : MonoBehaviour +{ + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/Assets/Scripts/Managers/ResourceManager.cs.meta b/Assets/Scripts/Managers/ResourceManager.cs.meta new file mode 100644 index 00000000..98c1315c --- /dev/null +++ b/Assets/Scripts/Managers/ResourceManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55ea2b1da79987e459caa3fbb6bd096a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Physics/PhysicsBody.cs b/Assets/Scripts/Physics/PhysicsBody.cs index 4077696a..68f9dec3 100644 --- a/Assets/Scripts/Physics/PhysicsBody.cs +++ b/Assets/Scripts/Physics/PhysicsBody.cs @@ -112,17 +112,24 @@ public sealed class PhysicsBody : MonoBehaviour get { return m_Frication; } } - //[Tooltip("空气摩擦力")] - //[SerializeField] - //private Vector3 m_AirFriction; - //public Vector3 AirFriction - //{ - // get { return m_AirFriction; } - //} - - [Tooltip("力")] + [Tooltip("空气摩擦力")] + [SerializeField] + private float m_AirFriction; + public float AirFriction + { + get { return m_AirFriction; } + } + + [Tooltip("力")] [SerializeField] private Vector3 m_Force; + public Vector3 Force + { + get + { + return m_Force; + } + } [SerializeField] private PhysicsPrimitive m_Primitive; diff --git a/Assets/Scripts/Physics/PhysicsHelper.cs b/Assets/Scripts/Physics/PhysicsHelper.cs index 821241e3..44bf513e 100644 --- a/Assets/Scripts/Physics/PhysicsHelper.cs +++ b/Assets/Scripts/Physics/PhysicsHelper.cs @@ -19,6 +19,7 @@ public struct PhysicsCollisionInfo public PhysicsPrimitive prim1; public PhysicsPrimitive prim2; public Vector3 contact; + public Vector3 size; } public sealed class PhysicsHelper @@ -63,6 +64,7 @@ public sealed class PhysicsHelper float top = Mathf.Min(box1.Top, box2.Top); float bottom = Mathf.Max(box1.Bottom, box2.Bottom); info.contact = new Vector3((left + right )/2f, (top + bottom)/2f, 0 ); + info.size = new Vector3(right - left, top - bottom, 1); return true; } diff --git a/Assets/Scripts/Physics/PhysicsPrimitive.cs b/Assets/Scripts/Physics/PhysicsPrimitive.cs index 26fb5aa9..c94aee1a 100644 --- a/Assets/Scripts/Physics/PhysicsPrimitive.cs +++ b/Assets/Scripts/Physics/PhysicsPrimitive.cs @@ -185,4 +185,12 @@ public abstract class PhysicsPrimitive : MonoBehaviour } } + public bool IsInAir + { + get + { + return Bound.w > PhysicsWorld.Ground; + } + } + } \ No newline at end of file diff --git a/Assets/Scripts/Physics/PhysicsWorld.cs b/Assets/Scripts/Physics/PhysicsWorld.cs index 41ea59f8..ba9b1bc1 100644 --- a/Assets/Scripts/Physics/PhysicsWorld.cs +++ b/Assets/Scripts/Physics/PhysicsWorld.cs @@ -43,7 +43,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, 0, +/*character*/ 0, 0, 1, 1, 1, 1, /*prop */ 0, 0, 1, 1, 0, _, /*ground */ 0, 0, 0, 0, _, _, /*wall */ 0, 0, 0, _, _, _, @@ -59,6 +59,15 @@ public class PhysicsWorld : Singleton public const float Ground = 0.1f; + // 所有碰撞 + public List Collisions + { + get + { + return m_CollisionInfo; + } + } + public void Init() { m_TimeCount = Time.time; @@ -184,13 +193,13 @@ public class PhysicsWorld : Singleton { PhysicsPrimitive prim2 = m_Primitives[j]; - // check collision by group + // group int minGroup = Mathf.Min((int)prim1.Group, (int)prim2.Group); int maxGroup = Mathf.Max((int)prim1.Group, (int)prim2.Group); if (m_CollisionTable[minGroup * groupCount + groupCount - maxGroup - 1] == 0) continue; - // check collision by label + // label if (prim1.Label == prim2.Label) continue; @@ -220,11 +229,17 @@ public class PhysicsWorld : Singleton velocity += m_Gravity * dt; body.Velocity = velocity; - position += velocity * dt; + // impluse = d(mv) = m*dv + Vector3 impluse = body.Force * dt; + Vector3 deltaV = impluse / body.Weight; + velocity += deltaV; + body.Velocity = velocity; - body.transform.position = position; + position += velocity * dt; + + body.transform.position = position; - if(prim.IsOnGround) + if (prim.IsOnGround) { // pos=0, Vy=0 position.y = 0.1f; @@ -241,11 +256,32 @@ public class PhysicsWorld : Singleton velocity.y = 0; body.Velocity = velocity; } + else if(prim.IsInAir) // 空气摩擦力 + { + if(body.Velocity.x != 0 && body.AirFriction != 0) + { + float dv = body.AirFriction * dt; + dv = Mathf.Min(dv, Mathf.Abs(body.Velocity.x)); + dv = body.Velocity.x > 0 ? -dv : dv; + velocity.x += dv; + body.Velocity = velocity; + } + } + + body.SetForce(Vector3.zero); } void SolveCollision(PhysicsPrimitive prim, PhysicsCollisionInfo collision, float dt) { - return; + PhysicsPrimitive other = collision.prim1 == prim ? collision.prim2 : collision.prim1; + if(prim.Body != null && other.Body != null) + { + Vector3 pos = prim.Body.transform.position; + pos.x += pos.x > collision.contact.x ? collision.size.x / 2f : - collision.size.x / 2f; + prim.Body.transform.position = pos; + } + + return; PhysicsBody body = prim.Body; if (body == null) diff --git a/Assets/Scripts/Props.meta b/Assets/Scripts/Props.meta new file mode 100644 index 00000000..bb96602e --- /dev/null +++ b/Assets/Scripts/Props.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f299520ed9fcf4a45858ad4ef5a8d5d1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Test/ArmorSoldierScript.cs b/Assets/Scripts/Test/ArmorSoldierScript.cs index e4b051e1..924d7874 100644 --- a/Assets/Scripts/Test/ArmorSoldierScript.cs +++ b/Assets/Scripts/Test/ArmorSoldierScript.cs @@ -2,21 +2,17 @@ using System.Collections.Generic; using UnityEngine; -public class ArmorSoldierScript : MonoBehaviour +public class ArmorSoldierScript : Avatar { - // Start is called before the first frame update - void Start() - { - - } - - // Update is called once per frame - void Update() - { - - } + int Anim_HurtFront; - private void OnAnimatorMove() + private void Start() + { + base.Init(); + Anim_HurtFront = Animator.StringToHash("Hurt_Front"); + } + + private void OnAnimatorMove() { Animator animator = GetComponent(); @@ -34,4 +30,10 @@ public class ArmorSoldierScript : MonoBehaviour } } + public void Hurt() + { + Animator animator = GetComponent(); + animator.CrossFade(Anim_HurtFront, 0); + } + } diff --git a/Assets/Scripts/Test/SaionjiScript.cs b/Assets/Scripts/Test/SaionjiScript.cs index 10f2e9e3..90e4a7e0 100644 --- a/Assets/Scripts/Test/SaionjiScript.cs +++ b/Assets/Scripts/Test/SaionjiScript.cs @@ -21,6 +21,8 @@ public partial class SaionjiScript : Avatar // Start is called before the first frame update void Start() { + base.Init(); + animator = GetComponent(); //animator.speed = 0; PhysicsWorld.Instance.AddAnimator(animator); @@ -35,11 +37,11 @@ public partial class SaionjiScript : Avatar SetupAbilities(); } - private void Update() - { - //if (EnableAbilitySystem) - // m_AbilitySystem.OnUpdate(); - } + //private void Update() + //{ + // //if (EnableAbilitySystem) + // // m_AbilitySystem.OnUpdate(); + //} // 更新顺序: // internal animator update -> OnAnimatorMove() -> physics @@ -57,7 +59,7 @@ public partial class SaionjiScript : Avatar if(stateInfo.IsTag("IgnoreRootMotion")) { // ignore root motion - Debug.Log("ignore root motion "); + //Debug.Log("ignore root motion "); } else { diff --git a/Assets/Scripts/Test/SaionjiScript_Ability.cs b/Assets/Scripts/Test/SaionjiScript_Ability.cs index 8934b5da..d8233f56 100644 --- a/Assets/Scripts/Test/SaionjiScript_Ability.cs +++ b/Assets/Scripts/Test/SaionjiScript_Ability.cs @@ -4,10 +4,6 @@ using UnityEngine; public partial class SaionjiScript : Avatar { - /// - /// ability system - /// - AbilitySystem m_AbilitySystem = new AbilitySystem(); ConditionBase Not(ConditionBase cond) { @@ -19,7 +15,6 @@ public partial class SaionjiScript : Avatar return new ConditionAnd(c1, c2); } - ConditionBase Ands(params ConditionBase[] cond) { List conditions = new List(); @@ -71,13 +66,21 @@ public partial class SaionjiScript : Avatar AttackAbilityConfig config; - //招式会绑定一个motion + //招式会绑定一个motion + HitDefination hitDef = new HitDefination + { + }; 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); + attk1.AddHitDefination(hitDef); + AttackAbility attk2 = new AttackAbility(animator, Anim_LightAttack2, m_Body); + attk2.AddHitDefination(hitDef); + AttackAbility attk3 = new AttackAbility(animator, Anim_LightAttack3, m_Body); + attk3.AddHitDefination(hitDef); + AttackAbility attk4 = new AttackAbility(animator, Anim_LightAttack4, m_Body); + attk4.AddHitDefination(hitDef); + AttackAbility attk5 = new AttackAbility(animator, Anim_LightAttack5, m_Body); + attk5.AddHitDefination(hitDef); + AttackAbility attkRush = new AttackAbility(animator, Anim_LightAttackRush, m_Body); config = new AttackAbilityConfig() { animator = this.animator, @@ -164,7 +167,7 @@ public partial class SaionjiScript : Avatar //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // idle ability - trigger = new Trigger(condUpCmd, toJump) ; + trigger = new Trigger(condTriangleCmd, toJump) ; idle.AddTrigger(trigger); trigger = new Trigger(And(condTowardRight, condDRC), new List { wipeCmdRecord, switchToSuperKick }); idle.AddTrigger(trigger); @@ -187,10 +190,12 @@ public partial class SaionjiScript : Avatar idle.AddTrigger(triggerTurnRight); 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 { wipeCmdRecord, switchToDash, }); + // move ability + //trigger = new Trigger(Or(Ands(condRightButtonHold, condTowardRight, condTriangleCmd), Ands(condLeftButtonHold, condTowardLeft, condTriangleCmd)), toJumpForward); + //move.AddTrigger(trigger); + trigger = new Trigger(condTriangleCmd, toJump); + move.AddTrigger(trigger); + trigger = new Trigger(And(condTowardRight, And(condRightCmd, condRight2Cmd)), new List { wipeCmdRecord, switchToDash, }); move.AddTrigger(trigger); trigger = new Trigger(And(condTowardLeft, And(condLeftCmd, condLeft2Cmd)), new List { wipeCmdRecord, switchToDash }); move.AddTrigger(trigger); @@ -217,8 +222,8 @@ public partial class SaionjiScript : Avatar jump.AddTrigger(trigger); trigger = new Trigger(And(condLeftButtonHold, condCheckJump), new List { towardLeft, new ActionSetVelocityX(m_Body,-4) }, TriggerOnlyOnce.Off, TriggerSwallow.Off); jump.AddTrigger(trigger); - trigger = new Trigger(Ands(condCheckJump, Not(condRightButtonHold), Not(condLeftButtonHold)), new ActionSetVelocityX(m_Body, 0), TriggerOnlyOnce.Off, TriggerSwallow.Off); - jump.AddTrigger(trigger); + //trigger = new Trigger(Ands(condCheckJump, Not(condRightButtonHold), Not(condLeftButtonHold)), new ActionSetVelocityX(m_Body, 0), TriggerOnlyOnce.Off, TriggerSwallow.Off); + //jump.AddTrigger(trigger); trigger = new Trigger(condJumpOnGround, new ActionSetVelocity(m_Body, Vector3.zero), TriggerOnlyOnce.On, TriggerSwallow.Off); jump.AddTrigger(trigger); trigger = new Trigger(Ands(new ConditionJumpDone(jump, 0.4f), condJumpOnGround, Or(condRightButtonHold, condLeftButtonHold)), switchToMove); @@ -244,8 +249,8 @@ public partial class SaionjiScript : Avatar attk1.AddTrigger(trigger); attk1.AddTrigger(triggerTurnRight); attk1.AddTrigger(triggerTurnLeft); - trigger = new Trigger(condIsHit, new ActionLog("hit!!!")); - attk1.AddLateTrigger(trigger); + //trigger = new Trigger(condIsHit, new ActionLog("hit!!!")); + //attk1.AddLateTrigger(trigger); //ConditionMotionRange condAttkRushGhostRange = new ConditionMotionRange(animator, 0f, 0.8f); //trigger = new Trigger(condAttkRushGhostRange, enableGhost, false); -- cgit v1.1-26-g67d0