我在Unity3d中创建了一个静态函数,可以在一定数量的帧上淡化音乐。该函数被放置在Unity3d的FixedUpdate()中,以便根据实际时间(或至少接近希望)进行更新。
我目前的线性淡出数学看起来像这样:
if (CurrentFrames > 0) {
AudioSourceObject.volume = ((CurrentFrames / TotalFrames) * TotalVolume);
}
if (CurrentFrames <= 0) {
AudioSourceObject.volume = 0.00f;
return 0;
}
CurrentFrames--;
这很适合创建类似FadeOutBGM(NumberOfFrames)的函数;但现在我正在研究如何使用此函数创建对数淡出。
在线查看等式,我对我应该做的事情感到困惑。
答案 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)
但是你希望你的淡出功能看起来更像这样:(https://www.wolframalpha.com/input/?i=plot+(1%2F(1%2Be%5E(3t-4))+from+-5+to+5)
其中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--;