diff options
Diffstat (limited to 'Assets/Scripts/Unit')
5 files changed, 59 insertions, 19 deletions
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<CollisionSystem> 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<AnimationEventBase> 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<FxClear>(); - onClear.RunInEditor = true; - onClear.Initialize(new PlayEffectInfo(path, EffectPlayTypes.Oneshot, m_Root, effect.position, effect.rotation, effect.scale, 0, false)); + FxClear onClear = root.AddComponent<FxClear>();
+ 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 |