55 lines
1.4 KiB
C#
55 lines
1.4 KiB
C#
using UnityEngine;
|
|
|
|
[ExecuteInEditMode]
|
|
public class ReliefShaders_applyLightForDeferred : MonoBehaviour
|
|
{
|
|
public Light lightForSelfShadowing;
|
|
|
|
private Renderer _renderer;
|
|
|
|
private void Reset()
|
|
{
|
|
if ((bool)GetComponent<Light>())
|
|
{
|
|
lightForSelfShadowing = GetComponent<Light>();
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (!lightForSelfShadowing)
|
|
{
|
|
return;
|
|
}
|
|
if (_renderer == null)
|
|
{
|
|
_renderer = GetComponent<Renderer>();
|
|
}
|
|
if ((bool)GetComponent<Renderer>())
|
|
{
|
|
if (lightForSelfShadowing.type == LightType.Directional)
|
|
{
|
|
for (int i = 0; i < _renderer.sharedMaterials.Length; i++)
|
|
{
|
|
_renderer.sharedMaterials[i].SetVector("_WorldSpaceLightPosCustom", -lightForSelfShadowing.transform.forward);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int j = 0; j < _renderer.materials.Length; j++)
|
|
{
|
|
_renderer.sharedMaterials[j].SetVector("_WorldSpaceLightPosCustom", new Vector4(lightForSelfShadowing.transform.position.x, lightForSelfShadowing.transform.position.y, lightForSelfShadowing.transform.position.z, 1f));
|
|
}
|
|
}
|
|
}
|
|
else if (lightForSelfShadowing.type == LightType.Directional)
|
|
{
|
|
Shader.SetGlobalVector("_WorldSpaceLightPosCustom", -lightForSelfShadowing.transform.forward);
|
|
}
|
|
else
|
|
{
|
|
Shader.SetGlobalVector("_WorldSpaceLightPosCustom", new Vector4(lightForSelfShadowing.transform.position.x, lightForSelfShadowing.transform.position.y, lightForSelfShadowing.transform.position.z, 1f));
|
|
}
|
|
}
|
|
}
|