Unity3d 如何显示";停止“;汽车到达交通信号灯时屏幕上的信息?

Unity3d 如何显示";停止“;汽车到达交通信号灯时屏幕上的信息?,unity3d,Unity3d,我用过方块碰撞器和GUI功能。。。但是盒子对撞机的问题是,你的车在撞到对撞机后停了下来,我还希望屏幕上显示的信息在10秒后消失 这是我的密码: var msg = false; function OnCollisionEnter(theCollision : Collision) { if(theCollision.gameObject.name == "trafficLight") { Debug.Log("collided"); msg=true; } } f

我用过方块碰撞器和GUI功能。。。但是盒子对撞机的问题是,你的车在撞到对撞机后停了下来,我还希望屏幕上显示的信息在10秒后消失

这是我的密码:

var msg = false;
function OnCollisionEnter(theCollision : Collision)
{
  if(theCollision.gameObject.name == "trafficLight")
  {
    Debug.Log("collided");
    msg=true;

  }
}

function OnGUI () 
{
  if (msg== true) 
  {
    GUI.Box (Rect (100,0,500,50), "You need to stop if the traffic signal is red");
  }

}
但是盒子对撞机的问题是,你的车在碰撞后停了下来 撞上对撞机

你应该澄清这一点。最后,发布另一个问题,包括具体的问题和可能的问题

我还希望显示在屏幕上的信息逐渐消失 10秒后

然后在您的
monobhavior
Update
方法中放入类似的内容:

float timeElapsed;
float timeLimit = 10f;

void Update()
{
  if (msg)
  {
    timeElapsed += Time.deltaTime;
    if (timeElapsed >= timeLimit)
    {
      msg = false;
      timeElapsed = 0f;
    }
  }
}
或者,为了实现更优雅的方法,您可以使用协同程序:

IEnumerator FadeAfterTime(float timeLimit)
{
    yield return new WaitForSeconds(timeLimit);
    msg = false;
}

void OnCollisionEnter(Collision collision)
{
  if(theCollision.gameObject.name == "trafficLight")
  {

    msg=true;
    StartCoroutine(FadeAfterTime(10f)); 
  }
}

据我所知,当玩家靠近停车标志时,你希望屏幕上出现停车信息,这样玩家就必须自己停车

为了做到这一点,对于初学者来说,你需要让你的盒子成为触发器而不是碰撞器。每个物体的对撞机上都有一个小勾选框,上面写着触发器。你会希望这个被勾选

然后在红绿灯附近的触发框中放入类似的脚本:

var msg = false;
function Start()
{
}

function OnTriggerEnter(theCollision : Collision)
{
  if(theCollision.gameObject.name == "car") //where "car" you put the name of the car object
  {
        msg = true;
        StartCoroutine(FadeAfterTime(10f));
  }
}

IEnumerator FadeAfterTime(float timeLimit)
{
    yield return new WaitForSeconds(timeLimit);
    msg = false;
}

function OnGUI () 
{
    if (msg== true) 
    {
        GUI.Box (Rect (100,0,500,50), "You need to stop if the traffic signal is red");
    }

}

function Update()
{
}
本质上,红绿灯触发框将检测车辆何时进入指定区域,并显示GUI,在前面的回答中使用Heisenbug提供的淡出脚本


我现在不能亲自测试,但它应该对你有用。如果您有任何问题,请让我知道。

您应该为此使用光线投射功能。 我在这里提供了一个真实的例子

using UnityEngine;
using System.Collections;

public class carMovement : MonoBehaviour {
    bool isStop = false;
    public float speed = 30f;
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        if (!isStop) {
            transform.position += (Vector3.forward * Time.deltaTime * speed);

            var fwd = transform.TransformDirection (Vector3.forward);
            Debug.DrawRay (transform.position, fwd, Color.green);
            if (Physics.Raycast (transform.position, fwd, 10)) {
                print ("There is something in front of the object!");
                isStop = true;
                transform.position = transform.position;
            }
        }
    }
}

欢迎来到Stackoverflow。一旦你赢得了足够的声誉,就利用评论提出建议和评论内容。