#AudioMixerの音量の設定とか
まぁここ見て、その通りにやればいいよ。
http://tsubakit1.hateblo.jp/entry/2015/05/23/234053
ただAudioMixerの音量はデジベル(-80~0)なので注意。
AudioSource.volumeの0f~1fの感覚でやるとダメだぞ。
0.5f = -40dB
とか思ってやると、全然音が50%より小さくなるぞ。
※あと20dBとか設定できて、音量上げれると思うが、
ただ音割れするだけだからやめたほうがいい
詳しいことはググれ。
結果だけ載せる。
デジベル(dB)変換の式は、
dB = 20.0 × log10(i0/i1)
※「i0/i1」は割合
なので、C#で書くと、
20 * Mathf.Log10(volume);
すりゃええねん。
volume
にはスライダーの値とか(0f~1f)を送ればいい。
丁寧に値のバリデートするなら以下のように。
public void SetBgmVolume(float _volume)
{
float volume = Mathf.Clamp(_volume, 0.0001f, 1.0f);
var volumeDB = (float) (20.0d * Math.Log10(volume));
audioMixer.SetFloat("BGMVol", Mathf.Clamp(volumeDB, -80.0f, 0.0f));
}
#AudioMixerのダッキング再生の方法とか
そもそもダッキング再生ってなんぞや?
例えば、キャラクターがセリフをしゃべっている時に、
BGMがそのまま鳴っているとセリフが聞こえにくいから、BGMの音量さげる的な奴のこと。
そんなん、自分で好きに音量設定したらええやろ、って思うが。
まぁここ見て、その通りにやればいいよ。
http://kikikiroku.session.jp/unity5-basic-audio/#Voice
ただこの方法だと、
ボイスが再生されているときは、必ずBGMの音量が下がってしまう。
「戦闘中のボイスではBGN下げたくないんだよねぇ」
とか無能プランナーが言ってくるのはざらなので、
その場合は、ダッキングさせないボイスの別グループを作るか、SEで鳴らすとかで。
#さて本題
音量設定しつつ、その音量設定の元、ダッキング再生する方法
http://kikikiroku.session.jp/unity5-basic-audio/#Voice
ここの設定では固定値で-40dB
ダッキングでBGM音量を下げるようになっているので、
その固定値で音量が下がってしまう。
「音量設定した音量の50%の音量でダッキング再生してくれ」
とか無能プランナーが言ってくるのはざらなので、
ダッキングの音量をスクリプトで設定できるようにしておく。
やり方は簡単。
ボリューム設定の時と同じ感じで、
InspectorビューでBGMのDuck VolumeのThresholdを右クリックし、
Export ’Threshold (of BGM→Duck Volume)’ to scriptを選択。
Exposed Parametersで、「DuckVol」とか好きな名前に変更。
あとは、BGMの音量設定を変更するときなどに、
一緒に(スライダーの値を送って)設定してあげればいい。
public void SetDuckVolume(_volumeRate)
{
float DuckVolumeRate = 0.5f // どっかに定数定義してもいい
float duckVolume = Mathf.Clamp(_volumeRate * DuckVolumeRate , 0.0001f, 1.0f);
var duckVolumeDB = (float)(20.0d * Math.Log10(duckVolume));
audioMixer.SetFloat("DuckVol", duckVolumeDB);
}
#サウンドの実装であれこれ困った場合
Unityのサウンド周りは、
Unity5で特大のクソからクソになっただけ少しはマシになったが、
必要な最低限な機能しかないので、
だいたいCRIの『ADX2』を導入すれば解決してくれるよ。
https://game.criware.jp/products/adx2-smartphone/
ただUnityのポンコツAssetBundleとの相性は最悪だけど。
Unityのサウンドが最低限のクソみたいな機能しかないのは、
こういうミドルウェアに配慮という名の手抜きなんじゃないかな。