summaryrefslogtreecommitdiff
path: root/Assets/Scripts
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-11-02 19:53:12 +0800
committerchai <chaifix@163.com>2020-11-02 19:53:12 +0800
commit3708d0a07ce43c3d98a0171eacfa9c370c873f96 (patch)
tree728f72bd8e6c464c6f56db7b08755031f685c45c /Assets/Scripts
parent64061aee5d7849f348f07b78fc3f96ad7555c147 (diff)
*受击
Diffstat (limited to 'Assets/Scripts')
-rw-r--r--Assets/Scripts/ApplicationMain.cs4
-rw-r--r--Assets/Scripts/Avatar/Abilities/AbilityBase.cs4
-rw-r--r--Assets/Scripts/Avatar/Abilities/AttackAbility.cs35
-rw-r--r--Assets/Scripts/Avatar/Abilities/MoveAbility.cs8
-rw-r--r--Assets/Scripts/Avatar/AbilitySystem.cs41
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionEffects.meta8
-rw-r--r--Assets/Scripts/Avatar/Avatar.cs74
-rw-r--r--Assets/Scripts/Avatar/HitDefination.cs10
-rw-r--r--Assets/Scripts/Avatar/HitInfo.cs10
-rw-r--r--Assets/Scripts/Managers.meta2
-rw-r--r--Assets/Scripts/Managers/AvatarManager.cs30
-rw-r--r--Assets/Scripts/Managers/AvatarManager.cs.meta11
-rw-r--r--Assets/Scripts/Managers/ResourceManager.cs18
-rw-r--r--Assets/Scripts/Managers/ResourceManager.cs.meta11
-rw-r--r--Assets/Scripts/Physics/PhysicsBody.cs25
-rw-r--r--Assets/Scripts/Physics/PhysicsHelper.cs2
-rw-r--r--Assets/Scripts/Physics/PhysicsPrimitive.cs8
-rw-r--r--Assets/Scripts/Physics/PhysicsWorld.cs50
-rw-r--r--Assets/Scripts/Props.meta8
-rw-r--r--Assets/Scripts/Test/ArmorSoldierScript.cs28
-rw-r--r--Assets/Scripts/Test/SaionjiScript.cs14
-rw-r--r--Assets/Scripts/Test/SaionjiScript_Ability.cs45
22 files changed, 345 insertions, 101 deletions
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
/// <summary>
/// 检测到hitbox碰撞时的回调
/// </summary>
- public virtual void OnHit() { }
+ public virtual void OnHit(PhysicsCollisionInfo info) { }
/// <summary>
/// 检测到hurtbox碰撞时的回调
/// </summary>
- public virtual void OnHurt() { }
+ public virtual void OnHurt(PhysicsCollisionInfo info) { }
/// <summary>
/// 检测到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<Avatar>();
+ 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;
/// </summary>
public class AbilitySystem
{
- private static List<AbilitySystem> AbilitySystems = new List<AbilitySystem>();
-
/// <summary>
/// 当前执行的ability
/// </summary>
@@ -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;
/// </summary>
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
/// <summary>
/// 记录这个hit命中的avatar
/// </summary>
- private List<Avatar> m_HitAvatars;
+ private List<Avatar> m_HitAvatars = new List<Avatar>();
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<AvatarManager>
+{
+ private List<Avatar> m_Avatars = new List<Avatar>();
+
+ 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<PhysicsWorld>
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<PhysicsWorld>
public const float Ground = 0.1f;
+ // 所有碰撞
+ public List<PhysicsCollisionInfo> Collisions
+ {
+ get
+ {
+ return m_CollisionInfo;
+ }
+ }
+
public void Init()
{
m_TimeCount = Time.time;
@@ -184,13 +193,13 @@ public class PhysicsWorld : Singleton<PhysicsWorld>
{
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<PhysicsWorld>
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<PhysicsWorld>
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<Animator>();
@@ -34,4 +30,10 @@ public class ArmorSoldierScript : MonoBehaviour
}
}
+ public void Hurt()
+ {
+ Animator animator = GetComponent<Animator>();
+ 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>();
//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
{
- /// <summary>
- /// ability system
- /// </summary>
- 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<ConditionBase> conditions = new List<ConditionBase>();
@@ -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<ActionBase> { 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<ActionBase> { 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<ActionBase> { wipeCmdRecord, switchToDash, });
move.AddTrigger(trigger);
trigger = new Trigger(And(condTowardLeft, And(condLeftCmd, condLeft2Cmd)), new List<ActionBase> { 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<ActionBase> { 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);