红绿灯系统统一

Traffic Light System Unity

我目前正在创建一个停车场和驾驶模拟游戏,但我在制作时遇到了问题。目前我成功实现的

  1. 停车
  2. 当汽车撞到某物时游戏结束
  3. 交通灯系统

问题是,如果我的车在交通灯为绿色时继续前进,然后突然在另一个交通灯变成红色时,它会触发下一个碰撞器,我不希望这样,因为它是一个错误吧? .请看下图。

StopAndGoHandler GameObject 具有名为 StopAndGoHandler.cs 的脚本 如果交通信号灯是绿色你可以处理,黄色准备停车但你仍然可以去,红色完全停止。现在,如果即使交通灯是红色,汽车也继续前进,那么

Violation GameObject 具有脚本 TrafficViolation.cs

这是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);
}

这是我继承StopAndGoHandler.cs

TrafficViolation.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 只是将球体的 material 从红色、绿色和黄色更改。

如果我正确地玩这个游戏,请有人帮助我,如果不正确,请指导我。谢谢。

The problem is that if my car go forward when the traffic light is green and then suddenly it turns out to be red on the other traffic light it will trigger the next collider and I don't want that because it is a mistake right? .

我对这段文字和您在 post 中添加的图像的理解是,汽车顺利通过绿色交通信号灯。但是当它进入十字路口时,它触发了另一个红绿灯碰撞器,属于红色交通灯,导致违规。

我会做些什么来放置碰撞器,以检测汽车是否刚好在交通信号灯下方穿过交通信号灯,而不是在交叉路口的中间。例如:

假设在每条街道上,交通都可以双向流通,并且由于您的红绿灯在左侧,我假设汽车靠左行驶(就像在英国)。我会像这样放置红绿灯 OnTriggerEnter collider: