2017-02-26 1 views
2

Unity Engine을 사용하여 게임을 만들고 있고 태양 개체가 도달 할 때까지 밝기가 증가하도록하고 싶습니다. 하루 중 특정 시간을 기록한 다음 그 시간이 지나면 감소하기 시작합니다.값의 50 %를 다른 변수의 최대 값으로 설정하고 (최소 0 %/100 % 최소값과 동일하게)

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; 

내가 원하는 무엇 :

나는과 같이 낮 시간의 (1-0) 백분율 값으로 표현 일 - 시간이

dayPercent 0 0.5, currentSunLight 사이 인 경우 0에서 증가 제

dayPercent 0.5과 1 사이이면, currentSunLight 0

,369,136 10 내지 감소3210

이 작업을 수행하는 지저분한 방법이 있지만이 작업을 수행하는 데 간단한 수학 함수가있을 것으로 확신합니다.

편집 : 그냥 내가 현재의 논리에 집착 같은 것을 제안

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

답변

7

내 "지저분한"방법을 포함합니다 :

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

그러나 이것은 선형 접근 방식을 의미 태양은 선형 적으로 "상승"하고 마치 삼각형으로 움직이는 것처럼 갑자기 다시 선형으로 설정됩니다. 이를 계산하는 더 좋은 방법은보다 현실적인 장면을 만들기 위해 삼각 함수를 사용하는 것입니다.

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

삼각법 FTW –

관련 문제