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