2013-04-21 2 views
0

Я использовал полевые коллайдеры и функцию графического интерфейса ... но проблема с коробчатым коллайдером заключается в том, что ваш автомобиль останавливается после удара коллайдера, и я также хочу, чтобы сообщение, которое отображается на экране, исчезло через 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"); 
    } 

} 

ответ

1

но проблема с коробкой коллайдера является то, что ваш автомобиль останавливается после удара коллайдера

Вы должны разъяснить это. В конце концов, задайте другой вопрос с конкретной проблемой и, возможно, SSCCE.

Я также хочу сообщение, которое отображается на экране, чтобы исчезнуть через 10 секунд.

Затем положить что-то вроде этого внутри Update метода вашего MonoBehavior:

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)); 
    } 
} 
0

Из того, что я понимаю, , вы хотите, чтобы сообщение остановки появлялось на экране, когда игрок находится возле знака остановки, так что игрок должен сам остановить машину.

Для этого для начала вам нужно сделать свой курок триггером вместо коллайдера. На коллайдере каждого объекта есть небольшой флажок, который говорит «Триггер». Вы хотите, чтобы это было отмечено.

Затем поместите скрипт, похожий на это в поле запуска рядом с светофором:

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() 
{ 
} 

В сущности света триггер окно трафика будет обнаружить, когда автомобиль входит в обозначенную зону, и будет отображать графический интерфейс пользователя, с сценарием затухания, предоставленным Гейзенбугом в предыдущем ответе.

Я не могу проверить это сам в данный момент, но он должен сработать для вас. Если у вас есть какие-либо вопросы, lemme знаю.

-1

Для этой цели вы должны использовать функцию RayCasting. Здесь я привел настоящий пример.

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; 
      } 
     } 
    } 
} 
+0

Добро пожаловать в Stackoverflow. Используйте комментарии для предложений и критического содержания, как только вы получите достаточную репутацию. – Daenarys

Смежные вопросы