61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using UnityEngine;
							 | 
						||
| 
								 | 
							
								using System.Collections;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								public class PolygonLightFlicker : MonoBehaviour
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								// Properties
							 | 
						||
| 
								 | 
							
								public string waveFunction = "sin"; // possible values: sin, tri(angle), sqr(square), saw(tooth), inv(verted sawtooth), noise (random)
							 | 
						||
| 
								 | 
							
								public float startValue = 0.0f; // start
							 | 
						||
| 
								 | 
							
								public float amplitude = 1.0f; // amplitude of the wave
							 | 
						||
| 
								 | 
							
								public float phase = 0.0f; // start point inside on wave cycle
							 | 
						||
| 
								 | 
							
								public float frequency = 0.5f; // cycle frequency per second
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								// Keep a copy of the original color
							 | 
						||
| 
								 | 
							
								private Color originalColor;
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								// Store the original color
							 | 
						||
| 
								 | 
							
								void Start (){
							 | 
						||
| 
								 | 
							
								    originalColor = GetComponent<Light>().color;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								void Update (){
							 | 
						||
| 
								 | 
							
								    Light light = GetComponent<Light>();
							 | 
						||
| 
								 | 
							
								    light.color = originalColor * (EvalWave());
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								float EvalWave (){
							 | 
						||
| 
								 | 
							
								    float x = (Time.time + phase)*frequency;
							 | 
						||
| 
								 | 
							
								    float y;
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								    x = x - Mathf.Floor(x); // normalized value (0..1)
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								    if (waveFunction=="sin") {
							 | 
						||
| 
								 | 
							
								        y = Mathf.Sin(x*2*Mathf.PI);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else if (waveFunction=="tri") {
							 | 
						||
| 
								 | 
							
								        if (x < 0.5f)
							 | 
						||
| 
								 | 
							
								            y = 4.0f * x - 1.0f;
							 | 
						||
| 
								 | 
							
								        else
							 | 
						||
| 
								 | 
							
								            y = -4.0f * x + 3.0f;  
							 | 
						||
| 
								 | 
							
								    }    
							 | 
						||
| 
								 | 
							
								    else if (waveFunction=="sqr") {
							 | 
						||
| 
								 | 
							
								        if (x < 0.5f)
							 | 
						||
| 
								 | 
							
								            y = 1.0f;
							 | 
						||
| 
								 | 
							
								        else
							 | 
						||
| 
								 | 
							
								            y = -1.0f;  
							 | 
						||
| 
								 | 
							
								    }    
							 | 
						||
| 
								 | 
							
								    else if (waveFunction=="saw") {
							 | 
						||
| 
								 | 
							
								        y = x;
							 | 
						||
| 
								 | 
							
								    }    
							 | 
						||
| 
								 | 
							
								    else if (waveFunction=="inv") {
							 | 
						||
| 
								 | 
							
								        y = 1.0f - x;
							 | 
						||
| 
								 | 
							
								    }    
							 | 
						||
| 
								 | 
							
								    else if (waveFunction=="noise") {
							 | 
						||
| 
								 | 
							
								        y = 1 - (Random.value*2);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else {
							 | 
						||
| 
								 | 
							
								        y = 1.0f;
							 | 
						||
| 
								 | 
							
								    }        
							 | 
						||
| 
								 | 
							
								    return (y*amplitude)+startValue;     
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								}
							 |