hey guys, I need some help with a first Person Survival/Adventure game that involves you searching the forest for survivors of a plane crash. After about 5 minutes in game, I want the Flashlight to begin to flicker. Here is my flashlight script:
var flashlightOn : boolean = false;
var soundOn : AudioClip;
var soundOff : AudioClip;
var onIntensity = 5.0;
var offIntensity = 0.0;
function Update () {
//Checks if the F key is down and whether the boolean is on or off.
if(Input.GetKeyDown(KeyCode.F) && flashlightOn == false){
AudioSource.PlayClipAtPoint(soundOn, light.transform.position);
flashlightOn = true; //If the f key is down and the boolean is false, it sets the boolean to true.
light.intensity = onIntensity;
} else {
if(Input.GetKeyDown(KeyCode.F) && flashlightOn == true) {
AudioSource.PlayClipAtPoint(soundOff, light.transform.position);
flashlightOn = false;//If the f key is down and the boolean is true, it sets the boolean to false.
light.intensity = offIntensity;
}
}
}
And This is my flicker effect:
// Properties
var waveFunction : String = “sin”; // possible values: sin, tri(angle), sqr(square), saw(tooth), inv(verted sawtooth), noise (random)
var base : float = 0.0; // start
var amplitude : float = 1.0; // amplitude of the wave
var phase : float = 0.0; // start point inside on wave cycle
var frequency : float = 0.5; // cycle frequency per second
// Keep a copy of the original color
private var originalColor : Color;
// Store the original color
function Start () {
originalColor = GetComponent(Light).color;
}
function Update () {
var light : Light = GetComponent(Light);
light.color = originalColor * (EvalWave());
}
function EvalWave () {
var x : float = (Time.time + phase)*frequency;
var y : float;
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.5)
y = 4.0 * x - 1.0;
else
y = -4.0 * x + 3.0;
}
else if (waveFunction==“sqr”) {
if (x < 0.5)
y = 1.0;
else
y = -1.0;
}
else if (waveFunction==“saw”) {
y = x;
}
else if (waveFunction==“inv”) {
y = 1.0 - x;
}
else if (waveFunction==“noise”) {
y = 1 - (Random.value*2);
}
else {
y = 1.0;
}
return (y*amplitude)+base;
}
How would I make it so that after about 5 minutes, the 2 script is activated and then about 10 seconds after that, both scripts are deactivated - emulating a fading battery? your help would be greatly appreciated!
Ok, here's some clarification :) I haven't customized the variables to your script, but it should be pretty easy to see what you'd need to edit to use it.
– Itinerantprivate var flashFlicker : boolean = false; private var flashOn : boolean = true; private var timerOn : boolean = true; function timerRun(){ while(timerOn == true){ yield WaitForSeconds(300.0); flashFlicker = true; yield WaitForSeconds(10.0); flashOn = false; flashFlicker = false; timerOn = false; } } timerRun();ok so i would put this on my flashlight right as a seperate script and rename the variables to the 2 script names correct??
– CherikovThat should do the job. Oh, or you could toss out those variables and place a this.GetComponent(ScriptName).enabled=false; in their place. Bit more compact, now that I'm thinking about it.
– ItinerantOh, or even shorter:
– Itinerantfunction timerRun(){ yield WaitForSeconds(300.0); this.GetComponent(FlashlightFlickerScript).enabled=true; yield WaitForSeconds(10.0); this.GetComponent(FlashlightFlickerScript).enabled=false; this.GetComponent(FlashlightOnScript).enabled=false; } timerRun();As you can tell by now, I'm not the most efficient scripter (yet) either :D But I'm testing these before giving them to you, so they should all work :)