mirror of
				https://github.com/DerTyp7/fps-citybuild-unity.git
				synced 2025-10-30 20:47:08 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using UnityEngine;
 | |
| 
 | |
| [ExecuteAlways]
 | |
| public class LightingManager : MonoBehaviour
 | |
| {
 | |
|     //Scene References
 | |
|     [SerializeField] private Light DirectionalLight;
 | |
|     [SerializeField] private LightingPreset Preset;
 | |
|     [SerializeField] private GameObject GamerManager;
 | |
|     //Variables
 | |
|     [SerializeField, Range(0, 24)] private float TimeOfDay;
 | |
| 
 | |
| 
 | |
|     private void Update()
 | |
|     {
 | |
|         if (Preset == null)
 | |
|             return;
 | |
| 
 | |
|         if (Application.isPlaying)
 | |
|         {
 | |
|             //(Replace with a reference to the game time)
 | |
|             TimeOfDay = GamerManager.GetComponent<TimeManager>().GetTimeOfDayFloat();
 | |
|             TimeOfDay %= 24; //Modulus to ensure always between 0-24
 | |
|             UpdateLighting(TimeOfDay / 24f);
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             UpdateLighting(TimeOfDay / 24f);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     private void UpdateLighting(float timePercent)
 | |
|     {
 | |
|         //Set ambient and fog
 | |
|         RenderSettings.ambientLight = Preset.AmbientColor.Evaluate(timePercent);
 | |
|         RenderSettings.fogColor = Preset.FogColor.Evaluate(timePercent);
 | |
| 
 | |
|         //If the directional light is set then rotate and set it's color, I actually rarely use the rotation because it casts tall shadows unless you clamp the value
 | |
|         if (DirectionalLight != null)
 | |
|         {
 | |
|             DirectionalLight.color = Preset.DirectionalColor.Evaluate(timePercent);
 | |
| 
 | |
|             DirectionalLight.transform.localRotation = Quaternion.Euler(new Vector3((timePercent * 360f) - 90f, 170f, 0));
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
|     //Try to find a directional light to use if we haven't set one
 | |
|     private void OnValidate()
 | |
|     {
 | |
|         if (DirectionalLight != null)
 | |
|             return;
 | |
| 
 | |
|         //Search for lighting tab sun
 | |
|         if (RenderSettings.sun != null)
 | |
|         {
 | |
|             DirectionalLight = RenderSettings.sun;
 | |
|         }
 | |
|         //Search scene for light that fits criteria (directional)
 | |
|         else
 | |
|         {
 | |
|             Light[] lights = GameObject.FindObjectsOfType<Light>();
 | |
|             foreach (Light light in lights)
 | |
|             {
 | |
|                 if (light.type == LightType.Directional)
 | |
|                 {
 | |
|                     DirectionalLight = light;
 | |
|                     return;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| } | 
