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 { private static VFXService sinleton; public VFX[] vfxs; private readonly Dictionary> pools = new(); private void Awake() { sinleton = this; DI.Register(this); } 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); if (location.forward.sqrMagnitude is not 0) 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; } } }