49 lines
1.3 KiB
C#
49 lines
1.3 KiB
C#
|
|
using System;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using UnityEngine;
|
||
|
|
using UnityEngine.Audio;
|
||
|
|
|
||
|
|
namespace Hallucinate.Audio
|
||
|
|
{
|
||
|
|
[Serializable]
|
||
|
|
public class AudioSample
|
||
|
|
{
|
||
|
|
public string Name;
|
||
|
|
public AudioClip Clip;
|
||
|
|
[Range(0f, 1f)] public float DefaultVolume = 1f;
|
||
|
|
[Range(0.1f, 3f)] public float DefaultPitch = 1f;
|
||
|
|
public AudioMixerGroup MixerGroup;
|
||
|
|
}
|
||
|
|
|
||
|
|
[CreateAssetMenu(fileName = "AudioDatabase", menuName = "Hallucinate/Audio/Audio Database")]
|
||
|
|
public class AudioDatabase : ScriptableObject
|
||
|
|
{
|
||
|
|
[SerializeField] private List<AudioSample> samples = new List<AudioSample>();
|
||
|
|
|
||
|
|
private Dictionary<string, AudioSample> _sampleCache;
|
||
|
|
|
||
|
|
public void Initialize()
|
||
|
|
{
|
||
|
|
_sampleCache = new Dictionary<string, AudioSample>();
|
||
|
|
foreach (var sample in samples)
|
||
|
|
{
|
||
|
|
if (!string.IsNullOrEmpty(sample.Name) && !_sampleCache.ContainsKey(sample.Name))
|
||
|
|
{
|
||
|
|
_sampleCache.Add(sample.Name, sample);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public AudioSample GetSample(string name)
|
||
|
|
{
|
||
|
|
if (_sampleCache == null) Initialize();
|
||
|
|
|
||
|
|
if (_sampleCache.TryGetValue(name, out var sample))
|
||
|
|
{
|
||
|
|
return sample;
|
||
|
|
}
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|