愚直に日本語で説明してみます。
コルーチンFadeSound
は、引数にあるfloat volume
の音量までfloat time
の時間を掛けて音量を増減します。
float vo
は1フレームあたりの音量の移動量が代入されており、終了条件を満たすまで毎フレームaudio.volume += vo;
することで滑らかな音量の変化を表現します。計算式を具体的に説明すると (volume - audio.volume)
は音量の差(音量の全体の移動量)を求めています。(time / Time.deltaTime)
は音量移動の所要時間 / 1フレームの時間
と表わせられ、音量の変化に必要なフレーム数を求めています。最終的に 音量の差 / 変化させたいフレーム数
を計算することで1フレームあたりの音量の移動量 vo
を求めています。(このような計算は「線形補間」と呼ばれます)
次に bool isOut
は音量を増やすのか減らすのかを示すフラグです。isOut == true
なら減らす(FadeOut)、isOut == false
なら増やす(FadeIn)、となります。
ループ条件は以下のように書かれていますが
while ((!isOut && audio.volume < volume) || (isOut && audio.volume > volume))
{
audio.volume += vo;
yield return null;
}
難しいので||
の前後で分けて考えましょう。同じ意図の動作になるよう分解すると以下のようなコードで表現できます。
csharp
1if (isOut)
2{
3 // FadeOut(徐々に音量を下げる)
4 while (audio.volume > volume)
5 {
6 audio.volume += vo;
7 yield return null;
8 }
9}
10else
11{
12 // FadeIn(徐々に音量を上げる)
13 while (audio.volume < volume)
14 {
15 audio.volume += vo;
16 yield return null;
17 }
18}
と書けます。
読みづらさの原因となる !
や &&
や ||
はブール論理演算子です。詳しくは以下のページを読んでください。
ブール論理演算子 (C# リファレンス)
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/boolean-logical-operators
音量を下げる時も audio.volume += vo;
と加算で記述しているのは、float vo = (volume - audio.volume) / (time / Time.deltaTime);
の中の (volume - audio.volume)
の結果によってfloat vo
にプラスかマイナスの符号が付いているためです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/03/29 08:55