Add SoundEffect audio system (ScriptableObject-based) with test assets
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
75f5704ab8
commit
0be503c927
22 files changed
+741
No files matched your search
@@ -0,0 +1,65 @@
|
||||
using System.Collections;
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
namespace Prototype
|
||||
{
|
||||
[AddComponentMenu("/")]
|
||||
public class SoundEffectInstance : MonoBehaviour
|
||||
{
|
||||
public AudioClip clip { get; set; }
|
||||
public SoundEffectOptions options { get; set; }
|
||||
|
||||
AudioSource audioSource;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
audioSource = gameObject.AddComponent<AudioSource>();
|
||||
{
|
||||
audioSource.playOnAwake = false;
|
||||
audioSource.dopplerLevel = 0;
|
||||
audioSource.outputAudioMixerGroup = options.audioMixerGroup;
|
||||
audioSource.clip = clip;
|
||||
audioSource.volume = options.GetVolume();
|
||||
audioSource.pitch = options.GetPitch();
|
||||
|
||||
var range = options.GetDistanceRange();
|
||||
|
||||
audioSource.spatialBlend = range.x == 0 && range.y == 0 ? 0 : 1;
|
||||
audioSource.rolloffMode = AudioRolloffMode.Linear;
|
||||
audioSource.minDistance = range.x;
|
||||
audioSource.maxDistance = range.y;
|
||||
audioSource.loop = options.GetLoop();
|
||||
}
|
||||
|
||||
if (!options.ShouldDestroyOnLoad())
|
||||
{
|
||||
DontDestroyOnLoad(this);
|
||||
}
|
||||
}
|
||||
|
||||
IEnumerator Start()
|
||||
{
|
||||
var delay = options.GetDelay();
|
||||
if (delay > 0)
|
||||
{
|
||||
yield return new WaitForSeconds(delay);
|
||||
}
|
||||
|
||||
audioSource.Play();
|
||||
|
||||
if (audioSource.loop)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
yield return new WaitForSecondsRealtime(audioSource.clip.length + .1f);
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user