odyssey

#14 odyssey 개발일지 : 낮/밤 시스템 만들기

san10 2023. 7. 22. 20:23

알토의 모험처럼 odyssey에서도 시간이 지남에 따라

낮밤이 바뀌게 만드려고 한다!

 

위 그림처럼 우선은 테스트로 낮부터 저녁까지 구현해보려고 한다..

하늘 그라데이션 셰이더

https://www.youtube.com/watch?v=O62Iio-Qvjs&list=PLsPC1W5E9IRTc-Urd0Y1OaXQSv1SzxVwp&index=7 

이 강의를 참고해서 셰이더를 만들었다.

그냥 튜토리얼 설명대로 똑같이 만들었다^___^

이렇게 하늘에 그라데이션이 생겼다!

 

 

하늘/바다 색상 변경

https://forum.unity.com/threads/2d-day-night-cycle-and-weather-system-a-la-altos-adventure.377959/

 

2d day/night cycle and weather system à la "Alto's Adventure"

Hi All, I'm developing a small 2d game and I started thinking about the day/night cycle and the weather system but couldn't wrap my head around it....

forum.unity.com

전반적으로 이 글에 있는 내용을 많이 참고했다.

 

public class DayNightController : MonoBehaviour
{
    [Range(0,1)]
    public float timeSlider;

    public Renderer skyGradient;
    public Gradient skyTopColor;
    public Gradient skyMiddleColor;
    public Gradient skyBottomColor;

    public SpriteRenderer oceanBase;
    public SpriteRenderer oceanShadow;
    public Gradient oceanBaseColor;
    public Gradient oceanShadowColor;
    
    void UpdateSkyColor()
    {
        skyGradient.material.SetColor("_TopColor", skyTopColor.Evaluate(timeSlider));
        skyGradient.material.SetColor("_MiddleColor", skyMiddleColor.Evaluate(timeSlider));
        skyGradient.material.SetColor("_BottomColor", skyBottomColor.Evaluate(timeSlider));
    }

    void UpdateOceanColor()
    {
        oceanBase.color = oceanBaseColor.Evaluate(timeSlider);
        oceanShadow.color = oceanShadowColor.Evaluate(timeSlider);
    }
    
    void Update()
    {
        UpdateSkyColor();
        UpdateOceanColor();
    }
    
}

그레디언트를 이용해서 구현했다.

slider의 값에 맞게 하늘과 바다의 색이 변하게 구현했다!

결과

 

Global Light

하늘이 어두워지는 만큼 구름, 지형, 나무, 풀 등의 사물도 어두워져야 한다.

원근감에 따라 어두워지는 정도를 다르게 하고 싶어서

Global Light를 여러개로 나눠서 구성했다.

구현은 위에서 했던 것과 비슷하게

slider의 값에 비례해서 색상이 바뀌게 구현했다.

결과

 

Spot Light

더 자연스럽게 만들기 위해 환경광도 구현했다..

Global Light와 마찬가지로 구름레이어, 지형레이어, 앞레이어로 나눠서

빛의 양을 조절했다.

추가로 이때 AnimationCurve로 해의 위치도 움직이게 했다!

 

 

밤까지 구현

저녁까지 구현한게 괜찮은 것 같아서

똑같은 방식으로 밤까지 구현했다!

최종 결과