我目前正在创建一个停车场和驾驶模拟游戏,但我有一个问题,使它。目前我成功地实现了
问题是,如果我的车在绿灯亮的时候向前走,突然在其他红灯上变成红色,就会触发下一个对撞机,我不想这样,因为这是个错误,对吗?请看下面的图片。
StopAndGoHandler.cs StopAndGoHandler GameObject有一个脚本

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

这是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只是改变球的材料从红色,绿色和黄色。
有人请帮助我,如果我做这个游戏正确,如果没有,你可以请指导我。谢谢。
发布于 2019-03-21 05:15:32
问题是,如果我的车在绿灯亮的时候向前走,突然在其他红灯上变成红色,就会触发下一个对撞机,我不想这样,因为这是个错误,对吗?
我对这篇文章的理解是,从你在帖子中添加的图片来看,这辆车在没有问题的情况下穿过绿灯。但当它进入十字路口时,它会触发另一个交通灯对撞机,它属于红灯,造成违规。
我要做的是把对撞机,它检测到,如果一辆汽车穿过红绿灯本身,而不是在十字路口的中间。例如:
假设在每条街道上,交通可以在两个方向循环,而且由于你的交通灯在左边,我认为汽车行驶在左边(就像在英国)。我会把红绿灯OnTriggerEnter对撞机像这样:

https://stackoverflow.com/questions/55273666
复制相似问题