1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.Rendering;
- namespace Enviro
- {
- [ExecuteInEditMode]
- [AddComponentMenu("Enviro 3/Volumetric Light")]
- public class EnviroVolumetricFogLight : MonoBehaviour
- {
- [Range(0f,2f)]
- public float intensity = 1.0f;
- [Range(0f,2f)]
- public float range = 1.0f;
- private Light myLight;
- private bool addedToMgr = false;
- private bool initialized = false;
- private CommandBuffer cascadeShadowCB;
- public bool isOn
- {
- get
- {
- if (!isActiveAndEnabled)
- return false;
- Init();
- return myLight.enabled;
- }
- private set{}
- }
-
- new public Light light {get{Init(); return myLight;} private set{}}
- void OnEnable()
- {
- Init();
- AddToLightManager();
- }
- void OnDisable()
- {
- if(cascadeShadowCB != null && myLight != null && myLight.type == LightType.Directional)
- myLight.RemoveCommandBuffer(LightEvent.AfterShadowMap, cascadeShadowCB);
- RemoveFromLightManager();
- initialized = false;
- }
- void AddToLightManager()
- {
- if (!addedToMgr && EnviroManager.instance.Fog != null)
- addedToMgr = EnviroManager.instance.Fog.AddLight(this);
- }
-
- void RemoveFromLightManager()
- {
- if (addedToMgr && EnviroManager.instance.Fog != null)
- EnviroManager.instance.Fog.RemoveLight(this);
-
- addedToMgr = false;
- }
- private void Init()
- {
- if (initialized)
- return;
- myLight = GetComponent<Light>();
-
- if(myLight.type == LightType.Directional)
- {
- cascadeShadowCB = new CommandBuffer();
- cascadeShadowCB.name = "Dir Light Command Buffer";
- cascadeShadowCB.SetGlobalTexture("_CascadeShadowMapTexture", new UnityEngine.Rendering.RenderTargetIdentifier(UnityEngine.Rendering.BuiltinRenderTextureType.CurrentActive));
- myLight.AddCommandBuffer(LightEvent.AfterShadowMap, cascadeShadowCB);
- }
- initialized = true;
- }
- }
- }
|