Я пытаюсь заставить некоторые сигналы поворота работать на транспортном средстве, которое я строю в Unity, но я не могу заставить сопрограммы работать должным образом. Я прошел через несколько различных итераций и обновлений в моем коде, и я чувствую, что я довольно близок. Мне кажется, я понимаю, что проблема в том, что, как только я включаю сигнал поворота, он переходит в соответствующий блок кода оператора If, запускает сопрограмму, и эта часть великолепна. Но затем в следующем кадре он делает это снова, а затем снова в следующем кадре. Так что я думаю, что он постоянно перекрывает сопрограммы. Что я могу сделать, чтобы сообщить, что сопрограмма уже запущена, и если это так, не запускать ее снова? Имея в виду, что, чтобы остановить l oop сопрограмм, мне нужно было бы либо выключить сигналы поворота, либо переключиться на другой сигнал поворота ... Надеюсь, кто-то может помочь мне здесь. Я застрял на этом некоторое время.
private void OperateTurnSignals()
{
if (GetControlValueAsBool("LeftTurnSignal"))
{
StartCoroutine(LeftTurnSignalCoroutine());
}
else if (GetControlValueAsBool("RightTurnSignal"))
{
StartCoroutine(RightTurnSignalCoroutine());
}
else if (GetControlValueAsBool("Hazards"))
{
StartCoroutine(TurnOnHazards(LeftTurnSignals, RightTurnSignals));
}
else
{
StopAllCoroutines();
TurnOffTurnSignals(LeftTurnSignals);
TurnOffTurnSignals(RightTurnSignals);
}
}
private IEnumerator TurnOnHazards(List<Light> leftTurnSignals, List<Light> rightTurnSignals)
{
TurnOnTurnSignals(leftTurnSignals);
TurnOnTurnSignals(rightTurnSignals);
yield return new WaitForSeconds(1.0f);
StartCoroutine(TurnOffHazards(leftTurnSignals, rightTurnSignals));
}
private IEnumerator TurnOffHazards(List<Light> leftTurnSignals, List<Light> rightTurnSignals)
{
TurnOffTurnSignals(leftTurnSignals);
TurnOffTurnSignals(rightTurnSignals);
yield return new WaitForSeconds(1.0f);
StartCoroutine(TurnOnHazards(leftTurnSignals, rightTurnSignals));
}
private IEnumerator LeftTurnSignalCoroutine()
{
TurnOnTurnSignals(LeftTurnSignals);
yield return new WaitForSeconds(1.0f);
TurnOffTurnSignals(LeftTurnSignals);
yield return new WaitForSeconds(1.0f);
StartCoroutine(LeftTurnSignalCoroutine());
}
private IEnumerator RightTurnSignalCoroutine()
{
TurnOnTurnSignals(RightTurnSignals);
yield return new WaitForSeconds(1.0f);
TurnOffTurnSignals(RightTurnSignals);
yield return new WaitForSeconds(1.0f);
StartCoroutine(RightTurnSignalCoroutine());
}
private void TurnOnTurnSignals(List<Light> turnSignals)
{
foreach (Light light in turnSignals)
{
light.gameObject.SetActive(true);
}
}
private void TurnOffTurnSignals(List<Light> turnSignals)
{
foreach (Light light in turnSignals)
{
light.gameObject.SetActive(false);
}
}