2
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.7 KiB
C#

using UnityEngine;
namespace Game
{
/// <summary>
/// 音效池化管理
/// </summary>
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<AudioPoolManager>
{
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<AudioPoolItem>($"Audio{audioClip.name}", item =>
{
item.GameObject = new GameObject("Audio");
item.AudioSource = item.GameObject.AddComponent<AudioSource>();
});
audioNew.GameObject.transform.parent = transform;
var audioSource = audioNew.GameObject.GetComponent<AudioSource>();
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);
}
}
}