使50%的值成为另一个变量的最大值(并且0%/ 100%等于最小值)

Sak*_*uya 2 c# math percentage unity-game-engine

我正在使用Unity Engine进行游戏,我想要一个太阳物体增加亮度,直到达到一天的特定时间,然后在那之后开始减少.

我将日间时间表示为白天的百分比值(0到1),如下所示:

float currentTime = 0.50f; //50% = noon, 0%/100% = midnight
float dayRange = 0.75f - 0.25f; //Daylight hours = 25% to 75% (6:00 to 18:00)
float dayPercent = (currentTime - 0.25f) / dayRange; //Current time between the daylight hours as a percentage.
float maxSunLight = 10f;
float currentSunLight = 5f;
Run Code Online (Sandbox Code Playgroud)

我想要的是:

dayPercent介于0和0.5之间时,currentSunLight将从0增加到10.

dayPercent介于0.5和1之间时,currentSunLight将从10减少到0.

我有一个混乱的方式这样做,但我敢肯定这可能是一个简单的数学函数?

编辑:只是为了包括我的"凌乱"方式

if(dayPercent <= 0.50f){
    currentSunLight =  (dayPercent * 2) / maxSunLight * 100;
} else {
    currentSunLight = (dayPercent / 2) / maxSunLight * 100;
}
Run Code Online (Sandbox Code Playgroud)

Psi*_*Psi 7

我会建议这样的事情,坚持你现在的逻辑:

currentSunLight = 10 - Math.Abs(dayPercent - 0.5) * 20;
Run Code Online (Sandbox Code Playgroud)

但这是一种线性方法,这意味着,你的太阳线性地"上升",然后突然再次线性地设置,就好像它以三角形移动一样.计算这个的更好方法是使用三角函数来实现更逼真的场景:

currentSunLight = Math.Cos( dayPercent * Math.PI ) * 10;
Run Code Online (Sandbox Code Playgroud)