using System; using System.Collections.Generic; using Mono.Event; using Sirenix.OdinInspector; using UnityEngine; namespace UnityTest.ZXL { public class EffectManager : BaseAutoMono { public List effectDatas = new List(); private void Start() { HideAllEffect(); EventManager.Instance.Subscribe(EffectEventArgs.EventId, EffectEvent); } private void OnDestroy() { EventManager.Instance.Unsubscribe(EffectEventArgs.EventId, EffectEvent); } private void EffectEvent(object sender, GameEventArgs e) { var args = e as EffectEventArgs; EffectData data = null; if (Enum.TryParse(args.effectName, out EffectType effectType)) { foreach (var effectData in effectDatas) { if (effectData.effectType == effectType) { data = effectData; break; } } ShowOrHideEffect(data.effectType, args.isShow); } } public void ShowOrHideEffect(EffectType effectType, bool isShow) { foreach (var effectData in effectDatas) { if (effectData.Check(effectType)) { effectData.effect.SetActive(isShow); break; } } } public void HideAllEffect() { foreach (var effectData in effectDatas) { effectData.effect.SetActive(false); } } public bool isEditor; #if UNITY_EDITOR [ShowIf("isEditor")] [Button] void Add() { effectDatas.Clear(); var effectComponents = transform.GetComponentsInChildren(); foreach (var effectComponent in effectComponents) { effectDatas.Add(effectComponent.effectData); } } #endif } [System.Serializable] public class EffectData { public EffectType effectType; public GameObject effect; public bool Check(EffectType effectType) { return this.effectType == effectType; } } [System.Serializable] public enum EffectType { 光度计爆炸特效, 光度计烟雾特效, 光度计持续燃烧特效, 喷水特效, 乙炔气瓶燃烧特效, 喷雾特效, 喷焰特效, } }