您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
88 行
2.4 KiB
88 行
2.4 KiB
using System.Linq;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Audio;
|
|
|
|
namespace GameOptionsUtility
|
|
{
|
|
internal class AudioOption : GameOption
|
|
{
|
|
public class Preferences
|
|
{
|
|
public const string prefix = GameOptions.Preferences.prefix + "Audio.";
|
|
public const string parameterPrefix = prefix + "Parameter.";
|
|
}
|
|
|
|
public float GetParameter(string paramName)
|
|
{
|
|
if (m_Parameters.Any(o => o.Parameter == paramName))
|
|
{
|
|
var param = m_Parameters.First(o => o.Parameter == paramName);
|
|
return PlayerPrefs.GetFloat(Preferences.parameterPrefix + paramName, param.Value);
|
|
}
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
public void SetParameter(string paramName, float value, bool Apply)
|
|
{
|
|
if (m_Parameters.Any(o => o.Parameter == paramName))
|
|
{
|
|
PlayerPrefs.SetFloat(Preferences.parameterPrefix + paramName, value);
|
|
|
|
if(Apply)
|
|
SetParameter(paramName, value);
|
|
|
|
}
|
|
}
|
|
|
|
public AudioMixer mixer
|
|
{
|
|
get
|
|
{
|
|
AudioMixer mixer = m_AudioMixer;
|
|
|
|
if (mixer == null)
|
|
mixer = Object.FindObjectOfType<AudioMixer>();
|
|
|
|
if (mixer == null)
|
|
{
|
|
Debug.LogWarning("No Mixer has been found in the project");
|
|
return null;
|
|
}
|
|
return mixer;
|
|
}
|
|
}
|
|
|
|
[Header("Audio Mixer"), SerializeField]
|
|
protected AudioMixer m_AudioMixer;
|
|
|
|
[Header("Parameters"), SerializeField]
|
|
protected ParameterValue[] m_Parameters = new ParameterValue[0];
|
|
|
|
[System.Serializable]
|
|
public struct ParameterValue
|
|
{
|
|
public string Parameter;
|
|
public float Value;
|
|
}
|
|
|
|
public override void Apply()
|
|
{
|
|
foreach(var parameter in m_Parameters)
|
|
{
|
|
SetParameter(parameter.Parameter, GetParameter(parameter.Parameter));
|
|
}
|
|
}
|
|
|
|
void SetParameter(string parameter, float value)
|
|
{
|
|
AudioMixer currentMixer = this.mixer;
|
|
|
|
if(currentMixer != null)
|
|
currentMixer.SetFloat(parameter, value);
|
|
|
|
}
|
|
}
|
|
|
|
}
|