summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Unit')
-rw-r--r--Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs5
-rw-r--r--Assets/Scripts/Unit/Collider/CollisionSystem.cs6
-rw-r--r--Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs6
-rw-r--r--Assets/Scripts/Unit/Components/UnitState/PCState.cs9
-rw-r--r--Assets/Scripts/Unit/TimelineEventProxy.cs52
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