Светофорная система Unity - PullRequest
0 голосов
/ 21 марта 2019

В настоящее время я создаю игру Car Parking and Driving Simulation , но у меня возникают проблемы при ее создании.В настоящее время то, что я успешно реализовал

  1. Парковка автомобиля
  2. Игра окончена, когда автомобиль врезается во что-то
  3. Система светофора

Theпроблема в том, что если моя машина едет вперед, когда на светофоре зеленый свет, а затем на другом светофоре он вдруг становится красным, это вызовет следующий коллайдер, и я не хочу этого, потому что это ошибка, верно?,Пожалуйста, смотрите изображение ниже.

StopAndGoHandler GameObject имеет скрипт с именем StopAndGoHandler.cs enter image description here, который обрабатывает, если светофорзеленым ты можешь идти, желтым - готовиться к остановке, но все же ты можешь идти, красным - к полной остановке.Теперь, если автомобиль едет вперед, даже если светофор красный, тогда появляется

Violation GameObject со скриптом TrafficViolation.cs enter image description here

Вот 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 просто меняет материал сферы с красного, зеленый и желтый.

Кто-нибудь, пожалуйста, помогите мне, если я делаю эту игру правильно, если не могли бы вы, пожалуйста, наставьте меня.Спасибо.

1 Ответ

1 голос
/ 21 марта 2019

Проблема в том, что если моя машина едет вперед, когда на светофоре зеленый свет, а затем на другом светофоре он вдруг становится красным, это вызовет следующий коллайдер, и я этого не хочу, потому чтоэто ошибка правильно?.

Что я понимаю для этого текста и из изображения, которое вы добавили в пост, это то, что машина без проблем пересекает зеленый светофор.Но когда он входит в перекресток, он запускает другой коллайдер светофора, который принадлежит светофору красного цвета, вызывая нарушение.

Что бы я сделал, чтобы поместить коллайдеры, которые обнаружат, если автомобиль пересекает светофорпрямо под светофором, а не посреди перекрестка.Например:

Предполагается, что на каждой улице движение может двигаться в обоих направлениях, а поскольку светофор находится слева, я предполагаю, что автомобиль едет по левому борту (как в Великобритании).Я бы разместил на светофоре OnTriggerEnter коллайдер так:

enter image description here

...