Chapter 12-3. 기타 : 낮과 밤
카테고리: Unity Lesson 3
태그: Unity Game Engine
인프런에 있는 케이디님의 [유니티 3D] 실전! 생존게임 만들기 - Advanced 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click
낮과 밤 구현하기
Directional Light
은 게임 내에서 전체적으로 쏴주는 빛이기 때문에 그 위치는 전혀 중요하지 않다. 중요한건 빛을 쏘는 방향이다. 이 방향에 따라 게임 월드의 낮 밤과, 그림자가 변한다.
Directional Light
를 Sun
태양으로 사용할 것이다. 이렇게 Sun
을 X 축을 중심으로 뺑뺑 회전시키면 낮과 밤을 바꿀 수 있다. Sun
의 앞방향(Z축)이 아래를 향하면 빛이 아래를 향하는 것이므로 게임 월드가 밝아지고 위로 향하면 빛이 위를 향하는 것이므로 게임 월드는 어두워진다.
🚀 Fog
✈ Fog 란?
그러나 이렇게 밤이 되어도 여러 오브젝트들이 이렇게 그대로 다 보이게 된다. 밤에는 검정색 안개 Fog
가 끼도록 하여 전체적으로 보이지 않게끔 해주면 된다.
Window - Rendering - Lighting Settings 에서 Fog
에 관한 값을 줄 수가 있다.
Fog
사용할 것이기 때문에 체크.- 이게 체크 안되어있으면 스크립트로 아무리 Fog 값을 주어도 말짱 도루묵.
Color
👉Fog
의 색깔Density
👉Fog
의 정도- 디폴트 상태는 낮이기 때문에 이렇게 설정해준 0.02 값은 낮의 Fog 값이다. 낮에는 잘 보여야 하니까 낮게.
📜DayAndNight
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DayAndNight : MonoBehaviour
{
[SerializeField] private float secondPerRealTimeSecond; // 게임 세계에서의 100초 = 현실 세계의 1초
private bool isNight = false;
[SerializeField] private float nightFogDensity; // 밤 상태의 Fog 밀도
private float dayFogDensity; // 낮 상태의 Fog 밀도
[SerializeField] private float fogDensityCalc; // 증감량 비율
private float currentFogDensity;
void Start()
{
dayFogDensity = RenderSettings.fogDensity;
}
void Update()
{
// 계속 태양을 X 축 중심으로 회전. 현실시간 1초에 0.1f * secondPerRealTimeSecond 각도만큼 회전
transform.Rotate(Vector3.right, 0.1f * secondPerRealTimeSecond * Time.deltaTime);
if (transform.eulerAngles.x >= 170) // x 축 회전값 170 이상이면 밤이라고 하겠음
isNight = true;
else if (transform.eulerAngles.x <= 10) // x 축 회전값 10 이하면 낮이라고 하겠음
isNight = false;
if (isNight)
{
if (currentFogDensity <= nightFogDensity)
{
currentFogDensity += 0.1f * fogDensityCalc * Time.deltaTime;
RenderSettings.fogDensity = currentFogDensity;
}
}
else
{
if (currentFogDensity >= dayFogDensity)
{
currentFogDensity -= 0.1f * fogDensityCalc * Time.deltaTime;
RenderSettings.fogDensity = currentFogDensity;
}
}
}
}
이 스크립트를
Sun
에 붙인다.
- Fog 와 관련된 것은
RenderSettings
에서 가져올 수 있다. (Window - Rendering - Lighting Settings 에서의 Fog를 가져옴)RenderSettings.fogDensity
👉 Fog 밀도 값.
- 태양은 매프레임마다 계속 X 축을 중심으로 회전한다.
Vector3.right
가 바로 X 축! (1, 0, 0)Vector3.right
을 중심으로 1 초에0.1f * secondPerRealTimeSecond
만큼 회전secondPerRealTimeSecond
를 100으로 설정했다면 1초에 10도씩 태양이 회전하는 것이다. 그러면 실제 시간으로 36초가 게임 상에서의 24시간이 될 것이다!
- 밤이면 낮의 Fog 값에서 밤의 Fog 값으로 변경해야 한다.
- 이를 1초에
0.1f * fogDensityCalc
씩 더하여 천천히currentFogDensity
을 밤의 Fog 값으로 만든다.
- 이를 1초에
- 낮이면 밤의 Fog 값에서 낮의 Fog 값으로 변경해야 한다.
- 이를 1초에
0.1f * fogDensityCalc
씩 빼서 천천히currentFogDensity
을 낮의 Fog 값으로 만든다.
- 이를 1초에
검은색 안개가 0.1
값으로 끼게 되니까 이젠 진짜 잘 안보인다!
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기