From 79ff94365b572d0e64ba945dcef2641ee508faa7 Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 6 Nov 2020 20:41:04 +0800 Subject: =?UTF-8?q?*=E7=A9=BA=E4=B8=AD=E6=94=BB=E5=87=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scripts/Avatar/Abilities/AttackAbility.cs | 5 +++ Assets/Scripts/Avatar/Abilities/IdleAbility.cs | 7 +++- Assets/Scripts/Avatar/Abilities/MoveAbility.cs | 5 +++ Assets/Scripts/Avatar/Actions/ActionEffects.meta | 8 ++++ .../ActionEffects/ActionActivateAfterImage.cs | 18 ++++++++ .../ActionEffects/ActionActivateAfterImage.cs.meta | 11 +++++ .../ActionEffects/ActionAfterImageInterval.cs | 18 ++++++++ .../ActionEffects/ActionAfterImageInterval.cs.meta | 11 +++++ .../Actions/ActionEffects/ActionPlayEffect.cs | 49 ++++++++++++++++++++++ .../Actions/ActionEffects/ActionPlayEffect.cs.meta | 11 +++++ Assets/Scripts/Avatar/Avatar.cs | 5 +++ Assets/Scripts/Avatar/Trigger.cs | 21 +++++++--- 12 files changed, 162 insertions(+), 7 deletions(-) create mode 100644 Assets/Scripts/Avatar/Actions/ActionEffects.meta create mode 100644 Assets/Scripts/Avatar/Actions/ActionEffects/ActionActivateAfterImage.cs create mode 100644 Assets/Scripts/Avatar/Actions/ActionEffects/ActionActivateAfterImage.cs.meta create mode 100644 Assets/Scripts/Avatar/Actions/ActionEffects/ActionAfterImageInterval.cs create mode 100644 Assets/Scripts/Avatar/Actions/ActionEffects/ActionAfterImageInterval.cs.meta create mode 100644 Assets/Scripts/Avatar/Actions/ActionEffects/ActionPlayEffect.cs create mode 100644 Assets/Scripts/Avatar/Actions/ActionEffects/ActionPlayEffect.cs.meta (limited to 'Assets/Scripts/Avatar') diff --git a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs index 57e9541b..5a200cf8 100644 --- a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs +++ b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs @@ -85,6 +85,11 @@ public class AttackAbility : AbilityBase { hit.WipeRecords(); } + + foreach(var trigger in m_Triggers) + { + trigger.Reset(); + } } public override void OnExit() diff --git a/Assets/Scripts/Avatar/Abilities/IdleAbility.cs b/Assets/Scripts/Avatar/Abilities/IdleAbility.cs index d42308db..e692cc2a 100644 --- a/Assets/Scripts/Avatar/Abilities/IdleAbility.cs +++ b/Assets/Scripts/Avatar/Abilities/IdleAbility.cs @@ -24,7 +24,12 @@ public class IdleAbility : AbilityBase public override void OnEnter() { m_Animator.CrossFadeInFixedTime(m_AnimHash, 0.25f); - } + + foreach (var trigger in m_Triggers) + { + trigger.Reset(); + } + } public override void OnInit() { diff --git a/Assets/Scripts/Avatar/Abilities/MoveAbility.cs b/Assets/Scripts/Avatar/Abilities/MoveAbility.cs index cf9fa106..61efd0cf 100644 --- a/Assets/Scripts/Avatar/Abilities/MoveAbility.cs +++ b/Assets/Scripts/Avatar/Abilities/MoveAbility.cs @@ -31,6 +31,11 @@ public class MoveAbility : AbilityBase public override void OnEnter() { m_Animator.CrossFadeInFixedTime(m_AnimHash, 0.1f); + + foreach (var trigger in m_Triggers) + { + trigger.Reset(); + } } public override void 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/Actions/ActionEffects/ActionActivateAfterImage.cs b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionActivateAfterImage.cs new file mode 100644 index 00000000..0b2ac361 --- /dev/null +++ b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionActivateAfterImage.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ActionActivateAfterImage : ActionBase +{ + private bool m_IsActive; + + public ActionActivateAfterImage(bool isActive) + { + m_IsActive = isActive; + } + + public override void Execute() + { + AfterImagePool.Instance.Activate(m_IsActive); + } +} diff --git a/Assets/Scripts/Avatar/Actions/ActionEffects/ActionActivateAfterImage.cs.meta b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionActivateAfterImage.cs.meta new file mode 100644 index 00000000..189e2f24 --- /dev/null +++ b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionActivateAfterImage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8df8331b2b9416b499e856b691c2326e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Avatar/Actions/ActionEffects/ActionAfterImageInterval.cs b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionAfterImageInterval.cs new file mode 100644 index 00000000..1d5c2f8b --- /dev/null +++ b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionAfterImageInterval.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ActionAfterImageInterval : ActionBase +{ + private int m_Interval; + + public ActionAfterImageInterval(int interval) + { + m_Interval = interval; + } + + public override void Execute() + { + AfterImagePool.Instance.SetInterval(m_Interval); + } +} diff --git a/Assets/Scripts/Avatar/Actions/ActionEffects/ActionAfterImageInterval.cs.meta b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionAfterImageInterval.cs.meta new file mode 100644 index 00000000..fa144bad --- /dev/null +++ b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionAfterImageInterval.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e87b2df9fee7956449df7dc2d430b862 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Avatar/Actions/ActionEffects/ActionPlayEffect.cs b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionPlayEffect.cs new file mode 100644 index 00000000..6a00aaa8 --- /dev/null +++ b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionPlayEffect.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +// 播放特效 +public class ActionPlayEffect : ActionBase +{ + enum Type + { + GivenPosition, // 固定位置 + FollowObject, // 动态位置 + Avatar, // 角色 + } + + Type m_Type; + + string m_Effect; + Vector3 m_Position; + Vector3 m_Rotation; + Vector3 m_Scale; + Transform m_Follow; + Avatar m_Avatar; + + public ActionPlayEffect(string effect, Vector3 position, Vector3 rotation, Vector3 scale) + { + + } + + public ActionPlayEffect(string effect, Transform followPosition, Vector3 rotation, Vector3 scale) + { + + } + + public ActionPlayEffect(string effect, Avatar avatar, Vector3 rotation, Vector3 scale) + { + m_Type = Type.Avatar; + m_Effect = effect; + m_Avatar = avatar; + m_Rotation = rotation; + m_Scale = scale; + } + + public override void Execute() + { + if (m_Type == Type.Avatar) + m_Position = m_Avatar.GetEffectPosition(); + EffectsManager.Instance.PlayEffect(m_Effect, m_Position, m_Rotation, m_Scale); + } +} diff --git a/Assets/Scripts/Avatar/Actions/ActionEffects/ActionPlayEffect.cs.meta b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionPlayEffect.cs.meta new file mode 100644 index 00000000..0e085fc4 --- /dev/null +++ b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionPlayEffect.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca4c24da837b8854f8510118217e063d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Avatar/Avatar.cs b/Assets/Scripts/Avatar/Avatar.cs index a8d90fa7..928d2197 100644 --- a/Assets/Scripts/Avatar/Avatar.cs +++ b/Assets/Scripts/Avatar/Avatar.cs @@ -131,4 +131,9 @@ public class Avatar : MonoBehaviour, IInteractable m_AbilitySystem.OnLateUpdate(); } + public virtual Vector3 GetEffectPosition() + { + return Vector3.zero; + } + } diff --git a/Assets/Scripts/Avatar/Trigger.cs b/Assets/Scripts/Avatar/Trigger.cs index 70a6d0f4..a885327c 100644 --- a/Assets/Scripts/Avatar/Trigger.cs +++ b/Assets/Scripts/Avatar/Trigger.cs @@ -31,17 +31,23 @@ public sealed class Trigger } private ConditionBase m_Condition; - private List m_ActionChain = new List(); - + private List m_ActionChain = new List(); + + private TriggerOnlyOnce m_OnlyOnce; + + private bool m_IsTriggered; + public Trigger(ConditionBase condition, List actions, TriggerOnlyOnce onlyOnce = TriggerOnlyOnce.Off, TriggerSwallow swallow = TriggerSwallow.On) { - m_Swallow = swallow; + m_OnlyOnce = onlyOnce; + m_Swallow = swallow; m_Condition = condition; m_ActionChain.AddRange(actions); } public Trigger(ConditionBase condition, ActionBase action, TriggerOnlyOnce onlyOnce = TriggerOnlyOnce.Off, TriggerSwallow swallow = TriggerSwallow.On) { - m_Swallow = swallow; + m_OnlyOnce = onlyOnce; + m_Swallow = swallow; m_Condition = condition; m_ActionChain.Add(action); } @@ -49,8 +55,8 @@ public sealed class Trigger //重置触发器的参数 public void Reset() { - - } + m_IsTriggered = false; + } /// /// 如果触发执行了,返回true,否则返回false @@ -58,12 +64,15 @@ public sealed class Trigger /// public bool Update() { + if (m_IsTriggered && m_OnlyOnce == TriggerOnlyOnce.On) + return false; if (m_Condition.Evaluate()) { foreach(var action in m_ActionChain) { action.Execute(); } + m_IsTriggered = true; return true; } return false; -- cgit v1.1-26-g67d0