//
|
// 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<ShadowTextureRenderer>();
|
}
|
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;
|
}
|
}
|
}
|
}
|