В настоящее время я создаю игру Car Parking and Driving Simulation , но у меня возникают проблемы при ее создании.В настоящее время то, что я успешно реализовал
- Парковка автомобиля
- Игра окончена, когда автомобиль врезается во что-то
- Система светофора
Theпроблема в том, что если моя машина едет вперед, когда на светофоре зеленый свет, а затем на другом светофоре он вдруг становится красным, это вызовет следующий коллайдер, и я не хочу этого, потому что это ошибка, верно?,Пожалуйста, смотрите изображение ниже.
StopAndGoHandler GameObject имеет скрипт с именем StopAndGoHandler.cs
, который обрабатывает, если светофорзеленым ты можешь идти, желтым - готовиться к остановке, но все же ты можешь идти, красным - к полной остановке.Теперь, если автомобиль едет вперед, даже если светофор красный, тогда появляется
Violation GameObject со скриптом TrafficViolation.cs ![enter image description here](https://i.stack.imgur.com/HpkTT.png)
Вот StopAndGoHandler.cs
public GameObject tlc;
public Text[] Obey_Traffic_Rules;
private void OnTriggerEnter(Collider other){
if(other.gameObject.CompareTag("Player")){
TrafficLightSignal();
}
}
private void OnTriggerExit(Collider other){
if(other.gameObject.CompareTag("Player")){
TrafficRulesInit();
}
}
public void TrafficLightSignal(){
var TLC = tlc.GetComponent<TrafficLightHandler>();
Debug.Log (TLC.Trafficlight.ToString());
if (TLC.Trafficlight == TRAFFIC_LIGHT.GREEN) {
TrafficRules(Obey_Traffic_Rules[0], true);
TrafficRules(Obey_Traffic_Rules[1], false);
TrafficRules(Obey_Traffic_Rules[2], false);
TrafficRules(Obey_Traffic_Rules[3], false);
} else if (TLC.Trafficlight == TRAFFIC_LIGHT.YELLOW) {
TrafficRules (Obey_Traffic_Rules [1], true);
TrafficRules(Obey_Traffic_Rules[2], false);
TrafficRules(Obey_Traffic_Rules[3], false);
TrafficRules(Obey_Traffic_Rules[0], false);
} else if (TLC.Trafficlight == TRAFFIC_LIGHT.RED) {
TrafficRules(Obey_Traffic_Rules[2], true);
TrafficRules(Obey_Traffic_Rules[0], false);
TrafficRules(Obey_Traffic_Rules[1], false);
TrafficRules(Obey_Traffic_Rules[3], false);
} else {
// nothing
}
}
public void TrafficRules(Text t, bool val){
t.gameObject.SetActive (val);
}
public void TrafficRulesInit()
{
TrafficRules(Obey_Traffic_Rules[0], false);
TrafficRules(Obey_Traffic_Rules[1], false);
TrafficRules(Obey_Traffic_Rules[2], false);
TrafficRules(Obey_Traffic_Rules[3], false);
}
Вот мой TrafficViolation.cs , который присваивает StopAndGoHandler.cs
void OnTriggerEnter(Collider other){
if(other.gameObject.CompareTag("Player")){
_TrafficViolation();
}
}
private void _TrafficViolation(){
var TLC = tlc.GetComponent<TrafficLightHandler>();
if (TLC.Trafficlight == TRAFFIC_LIGHT.RED) {
TrafficRules (Obey_Traffic_Rules [3], true);
TrafficRules (Obey_Traffic_Rules [0], false);
TrafficRules (Obey_Traffic_Rules [1], false);
TrafficRules (Obey_Traffic_Rules [2], false);
} else {
TrafficRules (Obey_Traffic_Rules [0], true);
TrafficRules (Obey_Traffic_Rules [1], false);
TrafficRules (Obey_Traffic_Rules [2], false);
TrafficRules (Obey_Traffic_Rules [3], false);
}
}
Между прочим, tlc - это моя TrafficLightSystem, которая просто имеет перечисление
public enum TRAFFIC_LIGHT
{
GREEN,
YELLOW,
RED
};
my TrafficLightHandler.cs просто меняет материал сферы с красного, зеленый и желтый.
Кто-нибудь, пожалуйста, помогите мне, если я делаю эту игру правильно, если не могли бы вы, пожалуйста, наставьте меня.Спасибо.