반응형
코드 작성
using UnityEngine;
public class SunController : MonoBehaviour
{
// 낮과 밤의 Skybox 머티리얼
public Material daySkybox;
public Material nightSkybox;
// 태양 역할을 하는 Directional Light
public Light sun;
// 하루의 시간을 초 단위로 설정 (예: 120초)
public float dayDuration = 120f;
// 현재 시간을 추적하는 변수
private float time;
void Start()
{
// 초기화
time = 0f;
UpdateSkyboxAndLighting();
}
void Update()
{
// 시간 업데이트
time += Time.deltaTime;
// 하루가 끝나면 시간을 초기화
if (time > dayDuration)
{
time = 0f;
}
// 태양의 위치와 Skybox를 업데이트
UpdateSunPosition();
UpdateSkyboxAndLighting();
}
void UpdateSunPosition()
{
// 낮과 밤의 비율 계산
float dayRatio = time / dayDuration;
// 태양의 각도 계산 (0에서 360도)
float sunAngle = dayRatio * 360f;
// 태양의 위치를 업데이트
sun.transform.rotation = Quaternion.Euler(sunAngle - 90f, 170f, 0f);
}
void UpdateSkyboxAndLighting()
{
// 낮과 밤의 비율 계산
float dayRatio = time / dayDuration;
// 낮일 때 Skybox와 조명 설정
if (dayRatio < 0.5f)
{
RenderSettings.skybox = daySkybox;
sun.intensity = Mathf.Lerp(0.1f, 1f, dayRatio * 2); // 아침에서 낮으로
sun.color = Color.Lerp(Color.red, Color.white, dayRatio * 2); // 일출 색상 변화
}
else
{
RenderSettings.skybox = nightSkybox;
sun.intensity = Mathf.Lerp(1f, 0.1f, (dayRatio - 0.5f) * 2); // 낮에서 저녁으로
sun.color = Color.Lerp(Color.white, Color.blue, (dayRatio - 0.5f) * 2); // 일몰 색상 변화
}
// Skybox가 변경되었음을 Unity에 알림
DynamicGI.UpdateEnvironment();
}
}
반응형