Record/TIL

[Unity] 낮과 밤 시간말고 스테이지별로 구현하기

석영 2024. 7. 23. 23:54
반응형

 

스테이지를 넘길 때마다 밤이되게 만들기

검색하면 대부분 시간으로 흘러가는 코드들만 있길래 한번 해봤습니다.

 

 

코드

DayNightCycle.cs

기존에는 시간으로 흐르는 코드였는데 비슷하겠지~ 하고 그대로 가져와서 해봤는데 달라서... 어.. 처음에 좀 헤멨던 것 같다. 역시 처음해보는건 다 어려운 듯..

using UnityEngine;

public class DayNightCycle : MonoBehaviour
{
    private int stage = 0; // 현재 스테이지
    private int dayStages = 5; // 낮 스테이지 수
    private int totalStages = 10; // 전체 스테이지 수

    [Header("Sun")]
    public Light sun;
    public Gradient sunColors;
    public AnimationCurve sunIntensity;

    [Header("Moon")]
    public Light moon;
    public Gradient moonColors;
    public AnimationCurve moonIntensity;

    void Start()
    {
        UpdateStage(0); // 초기 스테이지 설정
    }

    public void UpdateStage(int newStage)
    {
        stage = newStage;

        if (stage < dayStages)
        {
            // 낮
            UpdateLighting(sun, sunColors, sunIntensity);
        }
        else
        {
            // 저녁
            UpdateLighting(moon, moonColors, moonIntensity);
        }
    }

    void UpdateLighting(Light lightSource, Gradient gradient, AnimationCurve intensityCurve)
    {
        float intensity = intensityCurve.Evaluate((float)(stage % totalStages) / (totalStages - 1));

        lightSource.color = gradient.Evaluate((float)(stage % totalStages) / (totalStages - 1));
        lightSource.intensity = intensity;

        GameObject go = lightSource.gameObject;
        if (intensity <= 0 && go.activeSelf)
        {
            go.SetActive(false);
        }
        else if (intensity > 0 && !go.activeSelf)
        {
            go.SetActive(true);
        }
    }

    // 옆에서 볼때랑 위에서 볼때랑 조명 고정시킬라고
    public void RotateLightUp()
    {
        if (stage < dayStages)
        {
            sun.transform.rotation = Quaternion.Euler(30f, 0f, 0f);
        }
        else
        {
            moon.transform.rotation = Quaternion.Euler(30f, 0f, 0f);
        }
    }

    public void RotateLightDown()
    {
        if (stage < dayStages)
        {
            sun.transform.rotation = Quaternion.Euler(0f, 0f, 0f);
        }
        else
        {
            moon.transform.rotation = Quaternion.Euler(0f, 0f, 0f);
        }
    }

}

 

 

오늘의 회고

발표가 제가 걸렸습니다... 저는 무대공포증이 있는 아가라 뒤에서 서포트만 해주는데 앞에 나서야한다니 무섭군여 하지만 열심히 사람들을 충격의 도가니탕으로 만들어보겠습니다.
열심히했으니 반응도 좋았으면 좋겠습니다.

 

 

 

반응형