using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class SpotLightSetUp : MonoBehaviour {
|
|
|
|
public string ShaderName = "Paco/PointLight/ColorDiffuse";
|
|
private Light pointLight;
|
|
|
|
private void Awake()
|
|
{
|
|
UpdateShaders();
|
|
}
|
|
|
|
|
|
private void UpdateShaders()
|
|
{
|
|
float xPos = transform.position.x;
|
|
float yPos = transform.position.y;
|
|
float zPos = transform.position.z;
|
|
pointLight = GetComponent<Light>();
|
|
foreach (Material mat in findAllMaterialsInRange(pointLight.range)) {
|
|
if (mat != null && mat.shader != null && mat.shader.name != null && mat.shader.name == ShaderName) {
|
|
mat.SetFloat("_LightX", xPos);
|
|
mat.SetFloat("_LightY", yPos);
|
|
mat.SetFloat("_LightZ", zPos);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
private Material[] findAllMaterialsInRange(float range)
|
|
{
|
|
List<Material> retVal = new List<Material>();
|
|
|
|
Renderer[] arrend = (Renderer[])FindObjectsOfType(typeof(Renderer));
|
|
foreach (Renderer rend in arrend) {
|
|
foreach (Material mat in rend.materials) {
|
|
if (!retVal.Contains(mat) && Vector3.Distance(transform.position,rend.transform.position) <= range) {
|
|
retVal.Add(mat);
|
|
}
|
|
}
|
|
}
|
|
|
|
return retVal.ToArray();
|
|
}
|
|
|
|
}
|