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;     
 | |
| }
 | |
| } |