Add SoundEffect audio system (ScriptableObject-based) with test assets

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Fable 5 committed 2026-07-10 13:25:56 +02:00
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);
}
}
}