728x90
오늘은 유니티 환경에서 한국시간에 맞춰 낮과 밤을 구현하는 방법에 대해 글을 쓰고자 합니다.
우선 일출시간과 일몰시간을 아래와 같이 간단하게 구성했습니다
그 후 360° 를 기준으로 하루가 지나며 180°를 기준으로 낮과 밤이 변합니다 따라서 각도는
- 1시간 → 15°
- 30분 → 7.5°
- 1분 → 0.25°
만큼 회전합니다.
따라서 유니티를 실행한 시간에 시간과 분을 가져온 후 시간에 맞춰 각도를 조절하고 10분마다 2.5°씩 회전하는 방식으로 구성했습니다.
먼저 한국 시간을 가져올 필요가 있습니다. 코드는 아래와 같습니다.
int utcNow = DateTime.UtcNow.Hour;
int NowHour = utcNow + 9; // 한국시간 적용을 위해 UTC + 9 시간 적용
int NowMinute = DateTime.Now.Minute; // 현재 분(min) 가져오기
물론 DateTime.Now를 사용하면 되지 않냐는 생각을 하실 수도 있으나 해당 코드를 영국에 가서 실행해야 하기에 UTC 즉, 국제 표준시를 사용한 후 +9를 하는 방식으로 한국 시간을 가져오게 만들었습니다.
낮과 밤을 표현하기 위해 빛을 조절해야 할텐데 저는 가장 간단하게 Directional Light의 X축을 회전하는 방식으로 낮과 밤을 표현하기로 했습니다.
현재시간을 가져온 후 그에 따라 Directional Light의 X축을 회전하고 10분마다 추가적인 회전을 하도록 코드를 구현했고 아래와 같습니다.
(0~5시 사이의 경우 밤이지만 6(Sun rise)보다 값이 작기에 부가적인 코드를 추가했습니다.)
public class MainLightRotation : MonoBehaviour
{
public Light directionalLight;
private float RotationH = 0;
private float AngleH = 15; // 시간 당 회전할 각도
private float RotationM = 0;
private float AngleM = 0.25f; // 분 당 회전할 각도
private float Rotation = 0;
int StandardHour = 6;
void Start()
{
int utcNow = DateTime.UtcNow.Hour;
int NowHour = utcNow + 9; // 한국시간 적용을 위해 UTC + 9 시간 적용
int NowMinute = DateTime.Now.Minute; // 현재 분(min) 가져오기
// 0~5시 사이의 값 조정
if (NowHour - 6 < 0)
{
RotationH = (NowHour + 24 - StandardHour) * AngleH;
}
else
{
RotationH = (NowHour - 6) * AngleH;
}
RotationM = NowMinute * AngleM;
Rotation = RotationH + RotationM;
directionalLight.transform.localRotation = Quaternion.Euler(Rotation, 0, 0);
StartCoroutine(LightRotate());
}
// 일출 일몰 적용 코드
IEnumerator LightRotate()
{
while (true)
{
Rotation += 2.5f;
directionalLight.transform.localRotation = Quaternion.Euler(Rotation, 0, 0);
yield return new WaitForSecondsRealtime(600);
}
}
}
결과적으로 아래와 같이 낮과 밤이 잘 표현되는 것을 볼 수 있습니다. (저의 유니티는 태양이 돕니다...ㅎㅎ)
WaitForSecondsRealtime(0.05)로 설정했습니다
'mingsDB' 카테고리의 다른 글
Python) OpenCV 다운받기 (1) | 2024.11.03 |
---|---|
Ubuntu) VS Code 터미널에서 상태 확인 (0) | 2024.10.02 |
[SCP]원격 파일 전송 (1) | 2024.09.18 |
vs code 효과음 끄기 (0) | 2024.08.28 |
Unity WebSocket 통신 (0) | 2024.08.14 |