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);
}
}
}