using UnityEngine; namespace Game { /// /// 音效池化管理 /// public class AudioPoolItem : ObjectPoolItemBase { public AudioSource AudioSource; public GameObject GameObject; protected override void OnDestroy() { base.OnDestroy(); GameObject.transform.SetParent(AudioPoolManager.Instance.Root.transform); } } public class AudioPoolManager : ObjectPoolBase { public override void Update() { foreach (var pool in ObjectPool) foreach (var item in pool.Value) { if (!item.IsAlive) continue; if (((AudioPoolItem)item).AudioSource.isPlaying) item.Destroy(); } } public void CreateSound(Transform transform, AudioClip audioClip) { var audioNew = Create($"Audio{audioClip.name}", item => { item.GameObject = new GameObject("Audio"); item.AudioSource = item.GameObject.AddComponent(); }); audioNew.GameObject.transform.parent = transform; var audioSource = audioNew.GameObject.GetComponent(); audioSource.PlayOneShot(audioClip); } } } namespace Game { public abstract partial class Util { public static void CreateSound(GameEntity entity, AudioClip audioClip) { var trans = entity.view.TransformViewOther; AudioPoolManager.Instance.CreateSound(trans, audioClip); } } }