对数淡入淡出游戏帧

时间:2016-11-01 03:19:02

标签: c# fade out programmatically

我在Unity3d中创建了一个静态函数,可以在一定数量的帧上淡化音乐。该函数被放置在Unity3d的FixedUpdate()中,以便根据实际时间(或至少接近希望)进行更新。

我目前的线性淡出数学看起来像这样:

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

这很适合创建类似FadeOutBGM(NumberOfFrames)的函数;但现在我正在研究如何使用此函数创建对数淡出。

在线查看等式,我对我应该做的事情感到困惑。

2 个答案:

答案 0 :(得分:1)

您可以使用Unity内置的AnimationCurve课程轻松完成此操作。在您的班级中定义它并使用Unity检查器绘制对数曲线。

然后在淡出课程中,做这样的事情:

public AnimationCurve FadeCurve;

//...

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

//...

它对于做各种缓和效果非常有用,只需尝试使用不同的曲线。

答案 1 :(得分:0)

欢迎您使用内置设备。否则,如果您想要更好的控制,可以使用调整后的S形函数。通常,sigmoid函数如下所示:(https://www.wolframalpha.com/input/?i=plot+(1%2F(1%2Be%5E(t)))+from+-5+to+5

enter image description here

但是你希望你的淡出功能看起来更像这样:(https://www.wolframalpha.com/input/?i=plot+(1%2F(1%2Be%5E(3t-4))+from+-5+to+5)

enter image description here

其中x是(CurrentFrames / TotalFrames)* 3的比率,y是输出音量。

但是我是如何从第一张到另一张图的?尝试用wolfram alpha中的指数输入(e ^(用这个)玩)的缩放器(即3x或5x)和偏移(即(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--;