Unity3d 如何显示";停止“;汽车到达交通信号灯时屏幕上的信息?
我用过方块碰撞器和GUI功能。。。但是盒子对撞机的问题是,你的车在撞到对撞机后停了下来,我还希望屏幕上显示的信息在10秒后消失 这是我的密码:Unity3d 如何显示";停止“;汽车到达交通信号灯时屏幕上的信息?,unity3d,Unity3d,我用过方块碰撞器和GUI功能。。。但是盒子对撞机的问题是,你的车在撞到对撞机后停了下来,我还希望屏幕上显示的信息在10秒后消失 这是我的密码: var msg = false; function OnCollisionEnter(theCollision : Collision) { if(theCollision.gameObject.name == "trafficLight") { Debug.Log("collided"); msg=true; } } f
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。一旦你赢得了足够的声誉,就利用评论提出建议和评论内容。