낮과 밤 시간 설정

Noke·2025년 5월 28일

Unity TIL

목록 보기
18/31

오늘은 다른 분이 만드신 낮과 밤 사이클 부분에서 지금이 낮인지 밤인지를 구별하는 로직을 짜 보았다.


🌞 밤낮 시간대

일단, 밤의 시간은 우리 시간으로 저녁 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 프로젝트할 때는 솔직히 재미 없었는데 이번에는 좀 재미있는 것 같다.

profile
유니티 개발자(진)

0개의 댓글