红绿灯系统统一

时间:2019-03-21 04:11:51

标签: c# unity3d game-development

我目前正在创建停车场和驾驶模拟游戏,但制作上遇到了问题。目前我已成功实施

  1. 停车
  2. 当车祸撞上东西时游戏结束
  3. 交通灯系统

问题是,如果我的车在红绿灯亮时前进,然后突然在另一个红绿灯上变成红色,它将触发下一个对撞机,我不希望这样,因为这是一个错误对? 。请参见下图。

StopAndGoHandler游戏对象具有名为 StopAndGoHandler.cs 的脚本 enter image description here 如果交通信号灯为绿色,则可以执行此操作,黄色准备停止,但红色仍可以继续运行。现在,即使交通信号灯为红色,如果汽车仍在行驶,那么

违反游戏对象,该脚本具有脚本 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
};

我的 TrafficLightHandler.cs 只是将球体的材质从红色,绿色和黄色更改。

如果我没有正确执行此游戏,请有人帮助我,否则请指导我。谢谢。

1 个答案:

答案 0 :(得分:1)

  

问题是,如果我的汽车在红绿灯亮时前进   绿色,然后突然在其他交通上变成红色   点燃它会触发下一个对撞机,我不想要,因为   这是一个错误吧?

对于本文以及您在帖子中添加的图像,我的理解是汽车可以毫无问题地越过绿色交通信号灯。但是,当它进入十字路口时,它会触发另一个交通信号灯对撞机,该撞机属于红色交通信号灯,会引起违规。

我该怎么做才能放置对撞机,该对撞机可以检测汽车是否在红绿灯下方而不是在红绿灯中间穿过红绿灯。例如:

假设在每条街道上,交通可以在两个方向上流通,并且由于您的交通信号灯在左侧,所以我假设汽车行驶在左侧(例如在英国)。我将像这样放置交通信号灯OnTriggerEnter对撞机:

enter image description here