// // DrawSceneObject.cs // // Dynamic Shadow Projector // // Copyright 2015 NYAHOON GAMES PTE. LTD. All Rights Reserved. // using UnityEngine; using System.Collections; namespace DynamicShadowProjector { [ExecuteAlways] [DisallowMultipleComponent] [RequireComponent(typeof(ShadowTextureRenderer))] public class DrawSceneObject : MonoBehaviour { // serialize fields [SerializeField] private Shader m_replacementShader; [SerializeField] private LayerMask m_cullingMask; // public property public Shader replacementShader { get { return m_replacementShader; } set { m_replacementShader = value; shadowTextureRenderer.SetReplacementShader(m_replacementShader, "RenderType"); } } public LayerMask cullingMask { get { return m_cullingMask; } set { m_cullingMask = value; if (shadowTextureRenderer.isProjectorVisible) { shadowTextureRenderer.cameraCullingMask = value; } } } private ShadowTextureRenderer m_shadowTextureRenderer; public ShadowTextureRenderer shadowTextureRenderer { get { if (m_shadowTextureRenderer == null) { m_shadowTextureRenderer = GetComponent(); } return m_shadowTextureRenderer; } } void OnValidate() { shadowTextureRenderer.SetReplacementShader(m_replacementShader, "RenderType"); if (shadowTextureRenderer.isProjectorVisible) { shadowTextureRenderer.cameraCullingMask = m_cullingMask; } } void OnEnable() { shadowTextureRenderer.cameraCullingMask = m_cullingMask; shadowTextureRenderer.SetReplacementShader(m_replacementShader, "RenderType"); } void OnDisable() { shadowTextureRenderer.cameraCullingMask = 0; shadowTextureRenderer.SetReplacementShader(null, null); } void OnVisibilityChanged(bool isVisible) { if (isVisible) { shadowTextureRenderer.cameraCullingMask = m_cullingMask; } else { shadowTextureRenderer.cameraCullingMask = 0; } } } }