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