浏览代码

Fixed AudioManager in response to pool changes

/main
Ciro Continisio 4 年前
当前提交
89aa39ea
共有 4 个文件被更改,包括 8 次插入23 次删除
  1. 4
      UOP1_Project/Assets/Scripts/Audio/AudioManager.cs
  2. 9
      UOP1_Project/Assets/Scripts/Audio/SoundEmitters/SoundEmitter.cs
  3. 16
      UOP1_Project/Assets/Scripts/Audio/SoundEmitters/SoundEmitterFactorySO.cs
  4. 2
      UOP1_Project/Assets/Scripts/Pool/Example/LocalPoolTester.cs

4
UOP1_Project/Assets/Scripts/Audio/AudioManager.cs


private void InitPool()
{
_factory = ScriptableObject.CreateInstance<SoundEmitterFactorySO>();
_factory.Prefab = _soundEmitterPrefab;
_factory.Prefab.name = "SoundEmitter Factory";
_factory.prefab = _soundEmitterPrefab;
_pool = ScriptableObject.CreateInstance<SoundEmitterPoolSO>();
_pool.name = "SoundEmitter Pool";
_pool.Factory = _factory;

private void OnSoundEmitterFinishedPlaying(SoundEmitter soundEmitter)
{
soundEmitter.OnSoundFinishedPlaying -= OnSoundEmitterFinishedPlaying;
soundEmitter.StopSound();
Pool.Return(soundEmitter);
}

9
UOP1_Project/Assets/Scripts/Audio/SoundEmitters/SoundEmitter.cs


using UnityEngine.Events;
[RequireComponent(typeof(AudioSource))]
public class SoundEmitter : MonoBehaviour, IPoolable
public class SoundEmitter : MonoBehaviour
{
private AudioSource _audioSource;
private float _lastUseTimestamp = 0;

{
_audioSource = this.GetComponent<AudioSource>();
_audioSource.playOnAwake = false;
}
public void OnRequest() { }
public void OnReturn(Action onReturned)
{
StopSound();
}
/// <summary>

16
UOP1_Project/Assets/Scripts/Audio/SoundEmitters/SoundEmitterFactorySO.cs


using UOP1.Factory;
[CreateAssetMenu(fileName = "NewSoundEmitterFactory", menuName = "Factory/SoundEmitter Factory")]
public class SoundEmitterFactorySO : ComponentFactorySO<SoundEmitter>
public class SoundEmitterFactorySO : FactorySO<SoundEmitter>
[SerializeField]
private SoundEmitter _prefab = default;
public SoundEmitter prefab = default;
public override SoundEmitter Prefab
public override SoundEmitter Create()
get
{
return _prefab;
}
set
{
_prefab = value;
}
return prefab;
}
}

2
UOP1_Project/Assets/Scripts/Pool/Example/LocalPoolTester.cs


particle.Play();
yield return new WaitForSeconds(particle.main.duration);
particle.Stop(true, ParticleSystemStopBehavior.StopEmitting);
yield return new WaitUntil(()=>particle.particleCount==0);
yield return new WaitUntil(()=> particle.particleCount == 0);
_pool.Return(particle);
}
正在加载...
取消
保存