using System.Collections; using System.Collections.Generic; using UnityEngine; using BITKit; using UnityEngine.Events; using UnityEngine.Pool; namespace BITKit { public struct VFXMessage { public string path; public Location location; } public class VFXService : MonoBehaviour, IObjectMatcher { static VFXService sinleton; public VFX[] vfxs; Dictionary> pools = new(); void Awake() { sinleton = this; DI.Register(this); } public Transform Spawn(VFXMessage message) { if (Data.TryGetValue(message.path, out var vfx)) { return Instantiate(vfx, message.location, message.location); } return null; } public Transform Spawn(Location location, params string[] keyWords) { if (TryMatch(out var prefab, keyWords)) { var pool = pools.Get(prefab.name); var instance = pool.Get(prefab,transform); instance.SetPositionAndRotation(location, location); instance.forward = location.forward; return instance; } else { BIT4Log.Log($"未找到:{JsonHelper.Get(keyWords)}"); return null; } } public bool TryMatch(out Transform value, params string[] key) { foreach (var vfx in vfxs) { if (vfx.IsMatch(key)) { value = vfx.prefab; return true; } } value = null; return false; } } }