From f900853952635a6e82e24fe62548d171823afda0 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 1 Sep 2021 17:47:20 +0800 Subject: =?UTF-8?q?*=E4=BF=AE=E6=94=B9=E7=B2=92=E5=AD=90=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=9C=A8=E7=BC=96=E8=BE=91=E5=99=A8=E4=B8=8B=E7=9A=84=E6=92=AD?= =?UTF-8?q?=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/Unit/Action/WaitForActionReachEnd.cs | 5 +-- Assets/Scripts/Unit/Collider/CollisionSystem.cs | 6 ++- .../Unit/Components/UnitAnimation/UnitAnimation.cs | 6 +-- .../Scripts/Unit/Components/UnitState/PCState.cs | 9 ++-- Assets/Scripts/Unit/TimelineEventProxy.cs | 52 +++++++++++++++++++--- 5 files changed, 59 insertions(+), 19 deletions(-) (limited to 'Assets/Scripts/Unit') diff --git a/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs b/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs index c2dd5f92..771e946b 100644 --- a/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs +++ b/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs @@ -18,9 +18,8 @@ public class WaitForActionReachEnd : IEnumerator public bool MoveNext() { - var stateInfo = m_UnitAnimation.layers[m_Layer].stateInfo; - float normalTime = stateInfo.normalizedTime; - return normalTime < 1f; + var layer = m_UnitAnimation.layers[m_Layer]; + return layer.playbackNormalizedTime < 1f; } public void Reset() diff --git a/Assets/Scripts/Unit/Collider/CollisionSystem.cs b/Assets/Scripts/Unit/Collider/CollisionSystem.cs index e84c54a9..4a73446f 100644 --- a/Assets/Scripts/Unit/Collider/CollisionSystem.cs +++ b/Assets/Scripts/Unit/Collider/CollisionSystem.cs @@ -126,10 +126,14 @@ public class CollisionSystem : SingletonMB foreach (var projectile in registry.projectiles) { + if (projectile == null) + continue; for(int i = 0; i < hurtboxes.Count; ++i) { ColliderDescriptor hurtCollider = hurtboxes[i]; - if (projectile.owner.type == hurtCollider.unitCollider.owner.type) + if (hurtCollider.unitCollider == null) + continue; + if (projectile.owner == null || hurtCollider.unitCollider.owner == null || projectile.owner.type == hurtCollider.unitCollider.owner.type) continue; Box hurtbox = ColliderUtility.GetColliderInWorldSpace(hurtCollider); foreach (var itor in projectile.GetCollidersInWorldSpace()) diff --git a/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs b/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs index 6d17971d..1a990252 100644 --- a/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs +++ b/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs @@ -45,7 +45,7 @@ public class AnimatorLayerInfo get { AnimatorStateInfo stateInfo = m_Animator.GetCurrentAnimatorStateInfo(layerIndex); - if (isInTransition) + if (isInTransition) // 过渡中的动作认为当前动作是下一个动作 { stateInfo = m_Animator.GetNextAnimatorStateInfo(layerIndex); } @@ -62,7 +62,7 @@ public class AnimatorLayerInfo get { AnimatorClipInfo[] clips = null; - if (!isInTransition) + if (!isInTransition) { clips = m_Animator.GetCurrentAnimatorClipInfo(layerIndex); if (clips.Length == 0) @@ -70,7 +70,7 @@ public class AnimatorLayerInfo clips = m_Animator.GetNextAnimatorClipInfo(layerIndex); } } - else + else // 过渡中的动作认为当前动作是下一个动作 { clips = m_Animator.GetNextAnimatorClipInfo(layerIndex); } diff --git a/Assets/Scripts/Unit/Components/UnitState/PCState.cs b/Assets/Scripts/Unit/Components/UnitState/PCState.cs index 435591b0..6bd6fa78 100644 --- a/Assets/Scripts/Unit/Components/UnitState/PCState.cs +++ b/Assets/Scripts/Unit/Components/UnitState/PCState.cs @@ -210,12 +210,12 @@ public class PCState : UnitState { const int total = 3; int id = 0; - m_Owner.pcAnimation.AnimAttack(id); + m_Owner.pcAnimation.AnimAttack(id++); yield return null; while (true) { bool canCombo = m_Owner.pcAnimation.baseLayer.IsToggleOpen(EAnimationToogle.Combo); - if (canCombo) + if (canCombo && id < total) { if (Input.GetKeyDown("j")) { @@ -227,9 +227,8 @@ public class PCState : UnitState { TurnAround(true); } - ++id; - m_Owner.pcAnimation.AnimAttack(id); - yield return null; + m_Owner.pcAnimation.AnimAttack(id++); + yield return null; yield return new WaitForTransitionDone(m_Owner.pcAnimation); } } diff --git a/Assets/Scripts/Unit/TimelineEventProxy.cs b/Assets/Scripts/Unit/TimelineEventProxy.cs index 825cf5bf..e56f590a 100644 --- a/Assets/Scripts/Unit/TimelineEventProxy.cs +++ b/Assets/Scripts/Unit/TimelineEventProxy.cs @@ -8,10 +8,36 @@ using UnityEngine; [DisallowMultipleComponent] public partial class TimelineEventProxy { + #if UNITY_EDITOR // ActionTool里 + private static GameObject m_Root_Particles; + public static GameObject Root_Particles + { + get + { + if (m_Root_Particles == null) + m_Root_Particles = new GameObject("Root_Particles"); + return m_Root_Particles; + } + } + private static GameObject m_Root_Projectiles; + public static GameObject Root_Projectiles + { + get + { + if (m_Root_Projectiles == null) + m_Root_Projectiles = new GameObject("Root_Projectiles"); + return m_Root_Projectiles; + } + } + public bool isInEditMode; + public delegate void RegisterProjectileHandle(Projectile projectile); public RegisterProjectileHandle registerProjectile; + + public delegate void RegisterParticleSystemHandle(FxClear vfx); + public RegisterParticleSystemHandle registerParticleSystem; #endif public enum EEventType @@ -91,8 +117,10 @@ public partial class TimelineEventProxy } } m_PrevFrame = frame; - } - + } + + #region Event Handles + void ExecuteEvents(List events) { if (events == null || events.Count == 0) @@ -122,9 +150,16 @@ public partial class TimelineEventProxy GameObject go = GameObject.Instantiate(prefab); go.transform.SetParent(root.transform); - FxClear onClear = root.AddComponent(); - onClear.RunInEditor = true; - onClear.Initialize(new PlayEffectInfo(path, EffectPlayTypes.Oneshot, m_Root, effect.position, effect.rotation, effect.scale, 0, false)); + FxClear onClear = root.AddComponent(); + onClear.gameObject.name = prefab.name + "(Clone)"; + onClear.Initialize(new PlayEffectInfo(path, EffectPlayTypes.Oneshot, m_Root, effect.position, effect.rotation, effect.scale, 0, false)); +#if UNITY_EDITOR + if (isInEditMode && registerParticleSystem != null) + { + registerParticleSystem(onClear); + } + onClear.gameObject.transform.SetParent(Root_Particles.transform); +#endif } } @@ -168,7 +203,10 @@ public partial class TimelineEventProxy { registerProjectile(projectile); } + obj.transform.SetParent(Root_Projectiles.transform); #endif - } - + } + + #endregion + } \ No newline at end of file -- cgit v1.1-26-g67d0