오늘은 다른 분이 만드신 낮과 밤 사이클 부분에서 지금이 낮인지 밤인지를 구별하는 로직을 짜 보았다.
일단, 밤의 시간은 우리 시간으로 저녁 6시부터 아침 6시까지로, 낮은 이에 해당되지 않을 때로 구별하였다.
lightSource.transform.eulerAngles = (time - (lightSource == sun ? 0.25f : 0.75f)) * noon * 4.0f;
코드 자체는 빛 설정과 관련해서 여러 가지가 있지만, 우리는 낮과 밤만을 설정하면 되서 위의 코드만을 분석하면 된다.
참고로 noon은 (90, 0, 0)의 벡터 값으로 말 그대로 12시에 빛이 직각으로 들어옴을 의미한다.
위의 코드가 무슨 뜻인지 한 눈에는 파악하기 힘들 것이므로 자세하게 분석해 보았다.
- time이 0.5일 때 : 태양은 90도, 달은 -90도이므로 낮 12시를 뜻함
- time이 0.75 or 0.25일 때 : 태양과 달은 0도이거나 180도이므로 각각 일몰과 일출인 저녁 6시와 아침 6시이다.
- time이 0일 때 : 태양은 -90도, 달은 -270도(90도)이므로 밤 12시를 뜻함
물론, 현실처럼 음력 계산을 하지 않고 순수하게 태양과 달이 180도의 차이를 가지고 있다.
그러면, 위의 자료를 가지고 밤낮을 설정할 수 있게 된다.
따라서, 아래와 같은 코드를 작성해 보았다.
private void Update()
{
time = (time + timeRate * Time.deltaTime) % 1.0f;
if (0.25f <= time && time <= 0.75f)
{
if (IsNight) IsNight = false;
}
else
{
if (!IsNight) IsNight = true;
}
...
}
위의 코드에서 time이 0.25와 0.75 사이이면 낮이기 때문에 낮으로 변경, 그리고 그 시간이 아니면 밤이기 때문에 밤으로 변경한다.
그런데, 계속 값을 초기화하면 성능 상 좋지 않기 때문에 그 안에 다시 조건문을 넣어서 딱 한번만 bool 값이 바뀌게 설정해 보았다.
팀 프로젝트하면서 정시에 퇴근한 적이 없는 것 같다...
하지만, 개인이서 3D 프로젝트할 때는 솔직히 재미 없었는데 이번에는 좀 재미있는 것 같다.