首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交通灯系统统一

交通灯系统统一
EN

Stack Overflow用户
提问于 2019-03-21 04:11:50
回答 1查看 1.6K关注 0票数 0

我目前正在创建一个停车场和驾驶模拟游戏,但我有一个问题,使它。目前我成功地实现了

  1. 把车停下来
  2. 当汽车撞上什么东西时,游戏结束
  3. 交通灯系统

问题是,如果我的车在绿灯亮的时候向前走,突然在其他红灯上变成红色,就会触发下一个对撞机,我不想这样,因为这是个错误,对吗?请看下面的图片。

StopAndGoHandler.cs StopAndGoHandler GameObject有一个脚本

这处理如果交通灯是绿色的,你可以去,黄色准备停车,但你仍然可以走,红色完全停止。如果汽车向前行驶,即使交通灯是红色的,那就来了

具有脚本TrafficViolation.cs违犯GameObject

这是StopAndGoHandler.cs

代码语言:javascript
复制
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

代码语言:javascript
复制
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,它有一个枚举

代码语言:javascript
复制
public enum TRAFFIC_LIGHT
{
    GREEN,
    YELLOW,
    RED
};

我的TrafficLightHandler.cs只是改变球的材料从红色,绿色和黄色。

有人请帮助我,如果我做这个游戏正确,如果没有,你可以请指导我。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-21 05:15:32

问题是,如果我的车在绿灯亮的时候向前走,突然在其他红灯上变成红色,就会触发下一个对撞机,我不想这样,因为这是个错误,对吗?

我对这篇文章的理解是,从你在帖子中添加的图片来看,这辆车在没有问题的情况下穿过绿灯。但当它进入十字路口时,它会触发另一个交通灯对撞机,它属于红灯,造成违规。

我要做的是把对撞机,它检测到,如果一辆汽车穿过红绿灯本身,而不是在十字路口的中间。例如:

假设在每条街道上,交通可以在两个方向循环,而且由于你的交通灯在左边,我认为汽车行驶在左边(就像在英国)。我会把红绿灯OnTriggerEnter对撞机像这样:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55273666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档