[TIL] Unity - 시간에 따른 밝기 조절

MINO·2024년 7월 25일
post-thumbnail

2024-07-25


Global Light

전역 조명을 조절하기 위해 URP 의 Light 2D - Global Light 를 사용했다.

스크립트를 통해 시간의 흐름에 따라 Intensity 속성을 조절하여
밝기 조절을 하려고 한다.

Color 속성을 통해 붉은 노을이나 푸르스름한 새벽을 표현할 수도 있지만,
마을 맵의 전반적인 분위기와 맞지 않아 기본 흰색으로 통일하였다.


Sun.cs

using UnityEngine;
using UnityEngine.Rendering.Universal;
using System;

public class Sun : MonoBehaviour
{
    [SerializeField] private Light2D sunlight;
    [SerializeField] private float nightIntensity;
    [SerializeField] private float dayIntensity;

    public AnimationCurve dayNightCurve;
    public Action OnDateTimeChanged;

    private void OnEnable()
    {
        ClockSystem.OnTimeChanged += UpdateLight;
    }
	
    private void OnDisable()
    {
    	ClockSystem.OnTimeChanged -= UpdateLight;
	}
    
    public void UpdateLight()
    {
        float t = (float)ClockSystem.Hour / 24f;

        float dayNightT = dayNightCurve.Evaluate(t);
        sunlight.intensity = Mathf.Lerp(nightIntensity, dayIntensity, dayNightT);
    }
}
  • AnimationCurve.Evaluate(float t) : 애니메이션 커브의 특정 시간대의 값을 리턴 받는다.

지난 포스팅의 ClockSystem 스크립트에서 시간이 바뀔 때마다
OnTimeChanged 에 연결된 메서드를 실행시켜 ClockUI 를 업데이트 해주었다.

마찬가지로, 전역 조명의 밝기를 업데이트하게 수정해주었다.


결과물

Night->DayDay->Night

TIL 마무리

시간의 흐름에 따라 마을의 밝기를 조절하는 스크립트를 완성하였다.
앞으로도 ClockSystem 을 활용하여
세금 시스템과 시간대에 따른 몬스터 생성 주기 기능을 추가해봐야겠다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글