2016-11-01 28 views
1

Unity3d内で一定量のフレームにわたって音楽をフェードアウトするスタティック関数を作成しました。この関数はUnity3dのFixedUpdate()内に置かれ、実際の時間に応じて更新されます(少なくとも、うまくいけば閉じます)。対数フェードイン/アウトゲームフレーム

線形フェードアウトのための私の現在の数学のようになります。これはFadeOutBGM(NumberOfFrames)のようなものだ関数を作成するための簡単な方法としてうまく機能

if (CurrentFrames > 0) { 
    AudioSourceObject.volume = ((CurrentFrames/TotalFrames) * TotalVolume); 
} 
if (CurrentFrames <= 0) { 
    AudioSourceObject.volume = 0.00f; 
    return 0; 
} 
CurrentFrames--; 

; ...しかし、今私が探していますどのように私はこの関数を使って対数的なフェードアウトを作成します。

オンラインでエクササイズを見ると、私は何をすべきかについて完全に混乱しています。

+0

は正しいと答えをマークすること自由に感じなさい。 – Ralph

答えて

0

あなたは、組み込み関数の使用を歓迎しています。さもなければ、より細かい制御を望むならば、調整されたシグモイド関数を使うことができます。通常、シグモイド関数は次のようになります(https://www.wolframalpha.com/input/?i=plot+(1%2F(1%2Be%5E(t)))+from+-5+to+5

enter image description here

しかし、あなたはより多くのように見えるようにあなたのフェードアウト機能をしたい:xは、あなたの比率である(https://www.wolframalpha.com/input/?i=plot+(1%2F(1%2Be%5E(3t-4))+from+-5+to+5)

enter image description here

(CurrentFrames/TotalFrames)* 3、yは出力音量です。

しかし、最初のグラフから2番目のグラフはどうやって得られましたか?スケーラ(すなわち、 Wolframアルファの指数入力(e ^(これで遊ぶ))のオフセット(すなわち、(3x-4)または(3x-6))を使用して、曲線をどのように見せたいかを感じる。コード内の関数の入出力を調整できるので、必ずしもカーブと軸の交点を特定の数で並べる必要はありません。

だから、あなたのコードは次のようになります。

if (CurrentFrames > 0) { 
    // I'd recommend factoring out and simplifying this into a 
    // function, but I have close to zero C# experience. 
    inputAdjustment = 3.0 
    x = ((CurrentFrames/TotalFrames) * inputAdjustment); 
    sigmoidFactor = 1.0/(1.0 + Math.E^((3.0 * x) - 4.0)); 
    AudioSourceObject.volume = (sigmoidFactor * TotalVolume); 
} 

if (CurrentFrames <= 0) { 
    AudioSourceObject.volume = 0.00f; 
    return 0; 
} 
CurrentFrames--; 
+0

nateslagerありがとう、私はそれを試してみよう! :) –

+0

あなたは成功したのですか? – Ralph

1

UnityのAnimationCurveクラスを使って簡単にこれを行うことができます。クラスで定義し、Unityインスペクタを使用して対数カーブをプロットします。

はその後フェードアウトクラスでは、このような何か:緩和効果のすべての種類を行うため

public AnimationCurve FadeCurve; 

//... 

if (CurrentFrames > 0) { 
    float time = CurrentFrames/TotalFrames; 
    AudioSourceObject.volume = FadeCurve.Evaluate(time) * TotalVolume; 
} 

//... 

その非常に有用な、ちょうど異なる曲線で遊んでみてください。

+0

私はこれを提案しました。私は確かにこれを試してみるつもりです。 –