Problem with turn left light
Hi! I have script to car light (part code below) and I have problem. When I press 'q' light to turnleft is on but if I want press 'q' again nothing happens. To turn off the light I need to click the 'e' and then turns off.
//steer light//
if (Input.GetKeyDown("q") && turnright == true)
{
turnleft = !turnleft;
turnright = false;
}
else if (Input.GetKeyDown("q") && turnleft == false)
{
turnleft = !turnleft;
}
if (Input.GetKeyDown("e") && turnleft == true)
{
turnright = !turnright;
turnleft = false;
}
else if (Input.GetKeyDown("e") && turnleft == false)
{
turnright = !turnright;
}
if (turnright)
{
turnSignalRIGHT.material = turnsignalON;
turnSignalLEFT.material = turnsignalOFF;
rightSignalON = true;
leftSignalON = false;
}
else if(turnleft)
{
turnSignalRIGHT.material = turnsignalOFF;
turnSignalLEFT.material = turnsignalON;
rightSignalON = false;
leftSignalON = true;
}
else
{
turnSignalRIGHT.material = turnsignalOFF;
turnSignalLEFT.material = turnsignalOFF;
rightSignalON = false;
leftSignalON = false;
}
if(leftSignalON)
{
float floor = 0f;
float ceiling = 1f;
float emission = floor + Mathf.PingPong(Time.time*1.5f, ceiling - floor);
turnSignalLEFT.material.SetColor("_EmissionColor",new Color(1f,1f,1f)*emission);
}
if(rightSignalON)
{
float floor = 0f;
float ceiling = 1f;
float emission = floor + Mathf.PingPong(Time.time* 1.5f, ceiling - floor);
turnSignalRIGHT.material.SetColor("_EmissionColor",new Color(1f,1f,1f)*emission);
}
Comment
Best Answer
Answer by Pengocat · Jan 12, 2017 at 03:26 PM
You may want to use an enum instead of a lot of bools to keep track of things. Here is an example that you can work with.
public Renderer turnSignalLeft;
public Renderer turnSignalRight;
public Material turnSignalOff;
public Material turnSignalOn;
enum Direction
{
neutral,
right,
left
}
Direction currentDirection = Direction.neutral;
void Update()
{
// TurnSignal Left Toggle
if (Input.GetKeyDown(KeyCode.Q))
{
// if direction is not Left set it to Left Otherwise set it to Neutral
currentDirection = currentDirection != Direction.left ?
Direction.left : Direction.neutral;
}
// TurnSignal Right Toggle
if (Input.GetKeyDown(KeyCode.E))
{
// if direction is not Right set it to Right Otherwise set it to Neutral
currentDirection = currentDirection != Direction.right ?
Direction.right : Direction.neutral;
}
UpdateTurnSignal();
}
void UpdateTurnSignal()
{
switch (currentDirection)
{
case Direction.neutral:
SetTurnSignal(turnSignalRight, false);
SetTurnSignal(turnSignalLeft, false);
break;
case Direction.right:
SetTurnSignal(turnSignalRight, true);
SetTurnSignal(turnSignalLeft, false);
break;
case Direction.left:
SetTurnSignal(turnSignalRight, false);
SetTurnSignal(turnSignalLeft, true);
break;
default:
break;
}
}
void SetTurnSignal(Renderer signalRenderer, bool On)
{
float emission = Mathf.PingPong(Time.time, 1f);
if (On)
{
if (signalRenderer.material != turnSignalOn)
{
signalRenderer.material = turnSignalOn;
}
signalRenderer.material.SetColor("_EmissionColor", Color.white * emission);
}
else
{
if (signalRenderer.material != turnSignalOff)
{
signalRenderer.material = turnSignalOff;
}
}
}
The reason for all the material conditions is that it is quicker to check if a material is already set than to re-set it.