본문 바로가기
유니티/유니티 기능 구현

실시간 SkyBox 밤낮 구현

by xortl98 2022. 5. 13.
728x90

 개요

마스터 플랜에 들어갈 실시간 밤낮구현을 해보앗다.

 사용한 에셋 

https://assetstore.unity.com/packages/vfx/shaders/free-skybox-extended-shader-107400

 

FREE Skybox Extended Shader | 시각 효과 셰이더 | Unity Asset Store

Add depth to your next project with FREE Skybox Extended Shader from BOXOPHOBIC. Find this & more 시각 효과 셰이더 on the Unity Asset Store.

assetstore.unity.com

 스크립트

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class DayNightTimeCheck : MonoBehaviour
{
    [Header("스카이 박스3개, Light 넣기")]
    [SerializeField] Material skybox1;
    [SerializeField] Material skybox2;
    [SerializeField] Material skybox3;
    [SerializeField] GameObject Lamp;

    [SerializeField] GameObject directionalLight;   //아침엔 True
    int hours;  //시간 


    // Start is called before the first frame update
    void Start()
    {
        hours = DateTime.Now.Hour;
        StartCoroutine("HourCheck");       
    }

    IEnumerator HourCheck()
    {
        //현재 분 뺀 후 함수 실행시키려고 변수 2개 선언함 
        bool first = true;
        int minus_Time = 60 - DateTime.Now.Minute;
        while (true)
        {
            //현재 시각 받아옴
            hours = DateTime.Now.Hour;
            Check_Environment();
            if (first)
            {
                //만약 현재 시각 30분이면 1800초 후 이 함수를 다시 실행 
                yield return new WaitForSeconds(minus_Time * 60);
                first = false;
            }
            yield return new WaitForSeconds(3600f);
        }
    }


    // 아침,새벽 해지기 전, 밤 
    void Check_Environment()
    {
        //18~4시까지 가로등 ON
        if (hours >= 18 || hours <= 4) Lamp.SetActive(true);
        else Lamp.SetActive(false);

        //아침
        if (hours >= 6 && hours <= 18)
        {
            directionalLight.SetActive(true);
            RenderSettings.skybox = skybox1;
        }
        //새벽, 해지기 전 
        else if ((hours >= 18 && hours <= 21) || (hours >= 4 && hours <= 6))
        {
            directionalLight.SetActive(false);
            RenderSettings.skybox = skybox2;
        }
        //밤 
        else if (hours >= 21 || hours <= 4)
        {
            directionalLight.SetActive(false);
            RenderSettings.skybox = skybox3;
        }
    }
}

 플레이 영상