diff options
Diffstat (limited to 'Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs')
-rw-r--r-- | Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs b/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs new file mode 100644 index 00000000..119cf105 --- /dev/null +++ b/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs @@ -0,0 +1,145 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +// Timeline Event Handlers +public partial class TimelineEventProxy +{ + + void EventEffect(AnimationEventBase animEvent) + { + EventEffect effect = animEvent as EventEffect; + if (effect == null) + return; + string path = effect.effectPath; + if (path == null || path == "") + return; + GameObject prefab = ResourceManager.Instance.LoadAsset<GameObject>(path); + if (prefab != null) + { + GameObject root = new GameObject(); + + GameObject go = GameObject.Instantiate(prefab); + go.transform.SetParent(root.transform); + FxClear onClear = root.AddComponent<FxClear>(); + onClear.gameObject.name = prefab.name + "(Clone)"; + + PlayEffectInfo info = new PlayEffectInfo(); + info.path = path; + info.playEffectType = EffectPlayTypes.Oneshot; + info.posOffset = effect.position; + info.rot = effect.rotation; + info.scale = effect.scale; + info.bAttached = effect.attached; + if (effect.attached) + { + if (effect.attachNode == global::EventEffect.EAttachNode.Unit) + { + info.rootTr = m_Root; + } + else if (effect.attachNode == global::EventEffect.EAttachNode.Bone) + { + if (m_UnitModel != null) + { + info.rootTr = m_UnitModel.Find(effect.bone); + } + } + } + + onClear.Initialize(info); +#if UNITY_EDITOR + if (isInEditMode && registerParticleSystem != null) + { + registerParticleSystem(onClear); + } + onClear.gameObject.transform.SetParent(Root_Particles.transform); +#endif + } + } + + void EventCamera_Shake(AnimationEventBase animEvent) + { + + } + + void EventProjectile(AnimationEventBase animEvent) + { + EventProjectile e = animEvent as EventProjectile; + if (e == null) + return; + string projectilePath = e.projectilePath; + if (projectilePath == null || projectilePath == "") + return; + GameObject prefab = ResourceManager.Instance.LoadAsset<GameObject>(projectilePath); + if (prefab == null) + { + LogHelper.LogError("缺少对应的projectile, " + projectilePath); + return; + } + if (prefab.GetComponent<Projectile>() == null) + { + LogHelper.LogError("没有projectile脚本"); + return; + } + GameObject obj = GameObject.Instantiate(prefab); + Projectile projectile = obj.GetComponent<Projectile>(); + ProjectileInfo info = new ProjectileInfo(); + info.name = e.name; + info.tag = e.tag; + info.moveType = e.moveType; + info.owner = owner; + info.position = m_Root.transform.position + e.posOffset; + info.rotation = e.rotation; + info.scale = e.scale; + if (owner) + { + info.velocity = owner.transform.rotation * e.velocity; + } + else + { + info.velocity = e.velocity; + } + info.acceleration = e.acceleration; + info.lifetime = e.lifeTime; + info.sparkPath = e.sparkPath; + projectile.Initialize(info); + +#if UNITY_EDITOR + if (isInEditMode && registerProjectile != null) + { + registerProjectile(projectile); + } + obj.transform.SetParent(Root_Projectiles.transform); +#endif + } + + void EventMesh_AfterImage(AnimationEventBase animEvent) + { +#if UNITY_EDITOR + if (isInEditMode) + return; +#endif + EventMesh_AfterImage afterImage = animEvent as EventMesh_AfterImage; + if (afterImage == null) + return; + string avatarPath = owner.unitParts.afterImageAvatarPath; + GameObject go = ResourceManager.Instance.LoadAsset<GameObject>(avatarPath); + if (go) + { + GameObject instance = GameObject.Instantiate(go); + AfterImageAvatar avatar = instance.GetOrAddComponent<AfterImageAvatar>(); + if (!avatar) + { + GameObject.DestroyImmediate(instance); + return; + } + avatar.Initialize(owner); + } + } + + void EventUnit_SetPosition(AnimationEventBase animEvent) + { + // 在unitState回调里处理 + } + +}
\ No newline at end of file |