2017-02-26 1 views
2

Je fais un jeu avec Unity Engine et je veux un objet soleil pour augmenter la luminosité jusqu'à ce qu'il atteigne un moment précis de la journée, puis commencer à diminuer après ce moment.Faire 50% d'une valeur soit la valeur maximale d'une autre variable (et 0%/100% égale à la valeur minimum)

J'ai la journée représentée comme une valeur en pourcentage (0 à 1) des heures de jour comme ceci:

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; 

Ce que je veux:

Lorsque dayPercent est compris entre 0 et 0,5, currentSunLight passera de 0 à 10.

Lorsque dayPercent est compris entre 0,5 et 1, currentSunLight diminue de 10 à 0.

J'ai une manière désordonnée de faire ceci, mais je suis sûr qu'il y a probablement une fonction mathématique simple pour ceci?

Edit: Juste pour inclure mon « désordre » façon

if(dayPercent <= 0.50f){ 
    currentSunLight = (dayPercent * 2)/maxSunLight * 100; 
} else { 
    currentSunLight = (dayPercent/2)/maxSunLight * 100; 
} 

Répondre

7

Je suggère quelque chose comme ça, coller à votre logique actuelle:

currentSunLight = 10 - Math.Abs(dayPercent - 0.5) * 20; 

Mais ceci est une approche linéaire, ce moyen , votre soleil «se lève» linéairement et se met soudainement à se redresser linéairement, comme s'il se déplaçait dans un triangle. Une meilleure façon de calculer cela consiste à utiliser des fonctions trigonométriques pour obtenir une scène plus réaliste:

currentSunLight = Math.Cos(dayPercent * Math.PI) * 10; 
+1

Trigonométrie FTW –