| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- using System;
- using System.Collections;
- using UnityEngine;
- public class TimeManager : MonoBehaviour
- {
- public float gameSpeed = 1f;
- public Texture2D skyboxNight;
- public Texture2D skyboxSunrise;
- public Texture2D skyboxDay;
- public Texture2D skyboxSunset;
- public Gradient gradientNightToSunrise;
- public Gradient gradientSunriseToDay;
- public Gradient gradientDayToSunset;
- public Gradient gradientSunsetToNight;
- public Light globalLight;
- public int minutes;
- public int Minutes { get { return minutes; } set { minutes = value; OnMinutesChanged(value); } }
- public int hours;
- public int Hours { get { return hours; } set { hours = value; OnHoursChanged(value); } }
- public int days;
- public int Days { get { return days; } set { days = value; } }
- public float tempSecond;
- // Start is called once before the first execution of Update after the MonoBehaviour is created
- void Start()
- {
- }
- // Update is called once per frame
- void Update()
- {
- tempSecond += Time.deltaTime * gameSpeed;
- if(tempSecond >= 1)
- {
- Minutes++;
- tempSecond--;
- }
- }
- private void OnMinutesChanged(float value)
- {
- globalLight.transform.Rotate(Vector3.up, (1f / 1440f) * 360f, Space.World);
- if(value >= 60)
- {
- Hours++;
- Minutes -= 60;
- }
- if (Hours >= 24)
- {
- Hours -= 24;
- Days++;
- }
- }
- private void OnHoursChanged(float value)
- {
- switch (value)
- {
- case 6:
- StartCoroutine(LerpSkybox(skyboxNight, skyboxSunrise, 10f));
- StartCoroutine(LerpLight(gradientNightToSunrise, 10f));
- break;
- case 10:
- StartCoroutine(LerpSkybox(skyboxSunrise, skyboxDay, 10f));
- StartCoroutine(LerpLight(gradientSunriseToDay, 10f));
- break;
- case 18:
- StartCoroutine(LerpSkybox(skyboxDay, skyboxSunset, 10f));
- StartCoroutine(LerpLight(gradientDayToSunset, 10f));
- break;
- case 22:
- StartCoroutine(LerpSkybox(skyboxSunset, skyboxNight, 10f));
- StartCoroutine(LerpLight(gradientSunsetToNight, 10f));
- break;
- }
- }
- private IEnumerator LerpSkybox(Texture2D a, Texture2D b, float time)
- {
- RenderSettings.skybox.SetTexture("_Texture1", a);
- RenderSettings.skybox.SetTexture("_Texture2", b);
- RenderSettings.skybox.SetFloat("_Blend", 0);
- for (float i=0; i < time; i += Time.deltaTime)
- {
- RenderSettings.skybox.SetFloat("_Blend", i / time);
- yield return null;
- }
- RenderSettings.skybox.SetTexture("_Texture1", b);
- }
- private IEnumerator LerpLight(Gradient lightGradient, float time)
- {
- for (float i = 0; i < time; i += Time.deltaTime)
- {
- globalLight.color = lightGradient.Evaluate(i / time);
- RenderSettings.fogColor = globalLight.color;
- yield return null;
- }
- }
- }
|