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(path); if (prefab != null) { GameObject root = new GameObject(); GameObject go = GameObject.Instantiate(prefab); go.transform.SetParent(root.transform); FxClear onClear = root.AddComponent(); 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.parentNode == global::EventEffect.EParentNode.Unit) { info.rootTr = m_Root; } else if(effect.parentNode == global::EventEffect.EParentNode.World) { info.rootTr = null; } else if (effect.parentNode == global::EventEffect.EParentNode.Bone) { if (m_UnitModel != null) { info.rootTr = m_UnitModel.Find(effect.bonePath); } } else if(effect.parentNode == global::EventEffect.EParentNode.PresetBone) { if(m_UnitModel != null) { UnitDetail detail = m_UnitModel.GetComponent(); if(detail) { info.rootTr = detail.GetBone(effect.bone); } } } else if(effect.parentNode == global::EventEffect.EParentNode.ReferencePoint) { } } 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(projectilePath); if (prefab == null) { LogHelper.LogError("缺少对应的projectile, " + projectilePath); return; } if (prefab.GetComponent() == null) { LogHelper.LogError("没有projectile脚本"); return; } GameObject obj = GameObject.Instantiate(prefab); Projectile projectile = obj.GetComponent(); 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.unitDetail.afterImageAvatarPath; GameObject go = ResourceManager.Instance.LoadAsset(avatarPath); if (go) { GameObject instance = GameObject.Instantiate(go); AfterImageAvatar avatar = instance.GetOrAddComponent(); if (!avatar) { GameObject.DestroyImmediate(instance); return; } avatar.Initialize(owner); } } void EventUnit_SetPosition(AnimationEventBase animEvent) { // 在unitState回调里处理 } void EventMesh_VisibilityInMainCamera(AnimationEventBase animEvent) { EventMesh_VisibilityInMainCamera visible = animEvent as EventMesh_VisibilityInMainCamera; if (visible == null) return; if (owner == null || owner.unitRender == null) return; owner.unitRender.SetVisibilityInMainCamera(visible.isVisible); } #region Unit Image Effects void EventMesh_ImageEffect_MotionBlur(AnimationEventBase animEvent) { EventMesh_ImageEffect_MotionBlur motionBlur = animEvent as EventMesh_ImageEffect_MotionBlur; if (motionBlur == null) return ; if (owner == null || !(owner is PCController)) return; float angle = motionBlur.angle; angle = owner.isTowardRight ? angle : 180 - angle; // ((PCController)owner).unitImageEffect.ShowMotionBlur(motionBlur.lifeTime, angle, motionBlur.distance); ((PCController)owner).unitImageEffect.ShowGlitch(motionBlur.lifeTime); } #endregion }