- Home /
How to change the colour of a light every few seconds.
Hi I have a script to change the colour of a light every few seconds but I am having a few issues with it and I am wondering what the errors are and how to fix them. Here is my script using UnityEngine; using System.Collections;
public class lightController : MonoBehaviour
{
Color[] colours = new Color[5];
public float time;
public float repeatRate;
void Start()
{
colours[0] = Color.blue;
colours[1] = Color.cyan;
colours[2] = Color.green;
colours[4] = Color.magenta;
colours[5] = Color.red;
colours[6] = Color.yellow;
}
void Update()
{
InvokeRepeating("ChangeColour", time, repeatRate);
}
void ChangeColour()
{
light.color = colours[Random.Range(0, colours.Length -1)];
}
}
The error is
"IndexOutOfRangeException: Array index is out of range. lightController.Start () (at Assets/lightController.cs:16)"
and the problem is that the lights seem to flash very quickly not depending on how much the Time and Repeat Rate is. This is rather urgent because if I do not fix this error. I may induce a seizure.
Please help.
Answer by robertbu · Jul 28, 2014 at 02:16 AM
On line 3, you create 5 array positions for color (0 - 4) but you assign 7 colors in Start() (0 - 6). Note you cannot fix the problem by just changing the new at the top of the file. The line at the top is only executed when you attached the script, so you either need to change the size of the array in the Inspector, or you need to change in the code and then use 'Reset' on the component in the inspector. Or my favorite choice given the code you have here, make colours private.
private Color[] colours = new Color[7];
Your answer
Follow this Question
Related Questions
CountDown Timer Help (Seconds problem) 2 Answers
How to make loading screen 1 Answer
Spawn after every 5 seconds 4 Answers
How much seconds exist until midnight? 1 Answer
OnTriggerStay for multiple seconds 1 Answer