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(); 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 retVal = new List(); 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(); } }