//---------------------------------------------- // Realistic Car Controller // // Copyright © 2014 - 2023 BoneCracker Games // https://www.bonecrackergames.com // Buğra Özdoğanlar // //---------------------------------------------- using UnityEngine; using System.Collections; using System.Collections.Generic; /// /// Applies emission texture to the target renderer. /// [System.Serializable] public class RCC_Emission { public Renderer lightRenderer; // Renderer of the light. public int materialIndex = 0; // Index of the material. public bool noTexture = false; // Material has no texture. public bool applyAlpha = false; // Apply alpha channel. [Range(.1f, 10f)] public float multiplier = 1f; // Emission multiplier. private int emissionColorID; // ID of the emission color. private Material material; private Color targetColor; private bool initialized = false; /// /// Initializes the emission. /// public void Init() { // If no renderer selected, return. if (!lightRenderer) { Debug.LogError("No renderer selected for emission! Selected a renderer for this light, or disable emission."); return; } material = lightRenderer.materials[materialIndex]; // Getting correct material index. material.EnableKeyword("_EMISSION"); // Enabling keyword of the material for emission. emissionColorID = Shader.PropertyToID("_EmissionColor"); // Getting ID of the emission color. // If material has no property for emission color, return. if (!material.HasProperty(emissionColorID)) Debug.LogError("Material has no emission color id!"); initialized = true; // Emission initialized. } /// /// Sets emissive strength of the material. /// /// public void Emission(Light sharedLight) { // If not initialized, initialize and return. if (!initialized) { Init(); return; } // If light is not enabled, return with 0 intensity. if (!sharedLight.enabled) targetColor = Color.white * 0f; // If intensity of the light is close to 0, return with 0 intensity. if (Mathf.Approximately(sharedLight.intensity, 0f)) targetColor = Color.white * 0f; // If no texture option is enabled, set target color with light color. Otherwise, set target color with Color.white. if (!noTexture) targetColor = Color.white * sharedLight.intensity * multiplier; else targetColor = sharedLight.color * sharedLight.intensity * multiplier; // If apply alpha is enabled, set color of the material with alpha channel. if (applyAlpha) targetColor = new Color(targetColor.r, targetColor.g, targetColor.b, sharedLight.intensity * multiplier); // And finally, set color of the material with correct ID. if (material.GetColor(emissionColorID) != (targetColor)) material.SetColor(emissionColorID, targetColor); } }