From de4941bb799df774f29857ce42a7c139050fa096 Mon Sep 17 00:00:00 2001 From: chai Date: Tue, 10 Nov 2020 18:47:26 +0800 Subject: *hitmanager --- Assets/Scripts/Avatar/Avatar.cs | 5 +++- Assets/Scripts/Avatar/Avatar_Hurt.cs | 16 +++++++++++++ Assets/Scripts/Avatar/Avatar_Hurt.cs.meta | 11 +++++++++ Assets/Scripts/Avatar/HitDefination.cs | 36 +++++++++++++++++++++++----- Assets/Scripts/Managers/HitManager.cs | 10 ++++++++ Assets/Scripts/Test/ArmorSoldierScript.cs | 1 - Assets/Scripts/Test/SaionjiScript_Ability.cs | 14 +++++++---- 7 files changed, 80 insertions(+), 13 deletions(-) create mode 100644 Assets/Scripts/Avatar/Avatar_Hurt.cs create mode 100644 Assets/Scripts/Avatar/Avatar_Hurt.cs.meta (limited to 'Assets') diff --git a/Assets/Scripts/Avatar/Avatar.cs b/Assets/Scripts/Avatar/Avatar.cs index 03cceccb..c44af96c 100644 --- a/Assets/Scripts/Avatar/Avatar.cs +++ b/Assets/Scripts/Avatar/Avatar.cs @@ -6,7 +6,7 @@ using UnityEngine; /// /// 角色,包括player和opponents /// -public class Avatar : MonoBehaviour, IInteractable +public partial class Avatar : MonoBehaviour, IInteractable { public string Name; @@ -106,6 +106,9 @@ public class Avatar : MonoBehaviour, IInteractable public virtual void OnHurt(HurtInfo hurtInfo) { //Debug.Log("Hurt"); + HitDefination hitDef = hurtInfo.hitDef; + if (hitDef != null) + ApplyHit(hitDef); m_AbilitySystem.OnHurt(hurtInfo); } diff --git a/Assets/Scripts/Avatar/Avatar_Hurt.cs b/Assets/Scripts/Avatar/Avatar_Hurt.cs new file mode 100644 index 00000000..f0cedffa --- /dev/null +++ b/Assets/Scripts/Avatar/Avatar_Hurt.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public partial class Avatar : MonoBehaviour, IInteractable +{ + void ApplyHit(HitDefination hit) + { + if(hit.hurtAddForce.magnitude != 0) + { + m_Body.AddForce(hit.hurtAddForce); + } + + } + +} diff --git a/Assets/Scripts/Avatar/Avatar_Hurt.cs.meta b/Assets/Scripts/Avatar/Avatar_Hurt.cs.meta new file mode 100644 index 00000000..9b72c6ac --- /dev/null +++ b/Assets/Scripts/Avatar/Avatar_Hurt.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8225de6932892342bf356e15bda0858 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Avatar/HitDefination.cs b/Assets/Scripts/Avatar/HitDefination.cs index 22a78325..db07a677 100644 --- a/Assets/Scripts/Avatar/HitDefination.cs +++ b/Assets/Scripts/Avatar/HitDefination.cs @@ -3,16 +3,40 @@ using System.Collections.Generic; using UnityEngine; /// -/// 一个hit的效果,如果一个attack有多个hit,需要定义多个HitDef +/// 攻击类型,对应不同的受击者反馈(动作) /// -public class HitDefination -{ - public float start = 0f; - public float end = 1f; // 触发的开始和结束时间范围,用来处理一个attack多个hit的情况 +public enum HitType +{ + Light, // 轻击 + Midium, // 中击 + Heavy, // 重击 + Ground, // 击倒 + Air, // 击飞 +} - public int sparkID = 0; // 特效perfab ID +/// +/// 一个hit的定义,如果一个attack有多个hit,需要定义多个HitDef +/// +public class HitDefination +{ + // 触发的开始和结束时间范围,用来处理一个attack多个hit的情况 + public float start = 0f; + public float end = 1f; + + public HitType type = HitType.Light; // 类型 + + // 特效 + public string sparkName = string.Empty; // 特效 public Transform sparkHost = null; // 特效挂点 public Vector3 sparkPosition; // 特效位置(sparkHost为空时生效) public Quaternion sparkRotation; // 特效旋转 public Vector3 sparkScale = Vector3.one; // 特效缩放 + + // 相机反馈 + + // 攻击方反馈 + + // 受击方反馈 + public Vector3 hurtAddForce = Vector3.zero; + } \ No newline at end of file diff --git a/Assets/Scripts/Managers/HitManager.cs b/Assets/Scripts/Managers/HitManager.cs index 2b198788..9ccb3b39 100644 --- a/Assets/Scripts/Managers/HitManager.cs +++ b/Assets/Scripts/Managers/HitManager.cs @@ -35,6 +35,16 @@ public class HitManager : Singleton m_HurtBoxes.Add(hurtbox); } + public void RemoveHitBox(Hitbox hitbox) + { + m_HitBoxes.Remove(hitbox); + } + + public void RemoveHurtBox(Hurtbox hurtbox) + { + m_HurtBoxes.Remove(hurtbox); + } + /// /// 根据碰撞结果产生击中信息 /// diff --git a/Assets/Scripts/Test/ArmorSoldierScript.cs b/Assets/Scripts/Test/ArmorSoldierScript.cs index b8afa8ee..b6863a23 100644 --- a/Assets/Scripts/Test/ArmorSoldierScript.cs +++ b/Assets/Scripts/Test/ArmorSoldierScript.cs @@ -40,7 +40,6 @@ public class ArmorSoldierScript : Avatar { base.OnHurt(hurtInfo); Hurt(); - m_Body.AddForce(new Vector3(1000, 2000,0)); } } diff --git a/Assets/Scripts/Test/SaionjiScript_Ability.cs b/Assets/Scripts/Test/SaionjiScript_Ability.cs index ae211b89..5fc92f62 100644 --- a/Assets/Scripts/Test/SaionjiScript_Ability.cs +++ b/Assets/Scripts/Test/SaionjiScript_Ability.cs @@ -100,11 +100,16 @@ public partial class SaionjiScript : Avatar AttackAbility gun4 = new AttackAbility(animator, Anim_Gun4, m_Body); AttackAbility airAttk1 = new AttackAbility(animator, Anim_AirAttack1, m_Body); + hitDef = new HitDefination + { + hurtAddForce = new Vector3(1000,2000,0) + }; + airAttk1.AddHitDefination(hitDef); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // actions - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ActionTurn180 turn180 = new ActionTurn180(this.transform); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // actions + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ActionTurn180 turn180 = new ActionTurn180(this.transform); ActionTowardLeft towardLeft = new ActionTowardLeft(this.transform); ActionTowardRight towardRight = new ActionTowardRight(this.transform); @@ -393,7 +398,6 @@ public partial class SaionjiScript : Avatar airAttk1.AddTrigger(trigger); trigger = new Trigger(new ConditionMotionAtEnd(animator, Anim_AirAttack1), new List { new ActionSetVelocity(m_Body, Vector3.zero), new ActionUseGravity(m_Body), toJump}); airAttk1.AddTrigger(trigger); - airAttk1.AddHitDefination(hitDef); m_AbilitySystem.ForceStart(idle); } -- cgit v1.1-26-g67d0