Files
Deroc_Virtual_3D/Assets/FPS/Scripts/Game/AudioUtility.cs
T
Alex38Lyon 878ea46cac update
2025-06-03 12:00:47 +02:00

78 lines
2.4 KiB
C#

using UnityEngine;
using UnityEngine.Audio;
namespace Unity.FPS.Game
{
public class AudioUtility
{
static AudioManager s_AudioManager;
public enum AudioGroups
{
DamageTick,
Impact,
EnemyDetection,
Pickup,
WeaponShoot,
WeaponOverheat,
WeaponChargeBuildup,
WeaponChargeLoop,
HUDVictory,
HUDObjective,
EnemyAttack
}
public static void CreateSFX(AudioClip clip, Vector3 position, AudioGroups audioGroup, float spatialBlend,
float rolloffDistanceMin = 1f)
{
GameObject impactSfxInstance = new GameObject();
impactSfxInstance.transform.position = position;
AudioSource source = impactSfxInstance.AddComponent<AudioSource>();
source.clip = clip;
source.spatialBlend = spatialBlend;
source.minDistance = rolloffDistanceMin;
source.Play();
source.outputAudioMixerGroup = GetAudioGroup(audioGroup);
TimedSelfDestruct timedSelfDestruct = impactSfxInstance.AddComponent<TimedSelfDestruct>();
timedSelfDestruct.LifeTime = clip.length;
}
public static AudioMixerGroup GetAudioGroup(AudioGroups group)
{
if (s_AudioManager == null)
s_AudioManager = Object.FindFirstObjectByType<AudioManager>();
var groups = s_AudioManager.FindMatchingGroups(group.ToString());
if (groups.Length > 0)
return groups[0];
Debug.LogWarning("Didn't find audio group for " + group.ToString());
return null;
}
public static void SetMasterVolume(float value)
{
if (s_AudioManager == null)
s_AudioManager = Object.FindFirstObjectByType<AudioManager>();
if (value <= 0)
value = 0.001f;
float valueInDb = Mathf.Log10(value) * 20;
s_AudioManager.SetFloat("MasterVolume", valueInDb);
}
public static float GetMasterVolume()
{
if (s_AudioManager == null)
s_AudioManager = Object.FindFirstObjectByType<AudioManager>();
s_AudioManager.GetFloat("MasterVolume", out var valueInDb);
return Mathf.Pow(10f, valueInDb / 20.0f);
}
}
}