2016-09-04 5 views
-1

У меня есть очень простой скрипт, который отображает таймер на интерфейсе Unity 5. На финишной прямой гонщик входит в триггер, и таймер должен остановиться. Это не так. Я не ошибаюсь, он просто работает, как Форрест Гамп! Я планирую отправлять результаты таймера в таблицу лидеров, если я могу остановить таймер. Вот мой скрипт таймер:C# Таймер не останавливается при включении триггера

using UnityEngine; 
using UnityEngine.UI; 
using System.Collections; 

public class Timer : MonoBehaviour 
{ 

    public Text timerText; 
    private float startTime; 
    private bool finished = false; 

    // Use this for initialization 
    void Start() { 
     startTime = Time.time; 

    } 

    // Update is called once per frame 
    void Update() { 
     if(finished) 
      return; 


     float t = Time.time - startTime; 

     string minutes = ((int) t/60).ToString(); 
     string seconds = (t % 60).ToString("f2"); 

     timerText.text = minutes + ":" + seconds; 

    } 

    public void finish() 

    { 
     finished = true; 
     timerText.color = Color.yellow; 
    } 

} 

На сработавшей куб я haved поместил следующий сценарий:

using UnityEngine; 
using System.Collections; 

public class WinBox : MonoBehaviour 
{ 
    private void onTriggerEnter(Collider other) 
    { 
     GameObject.Find("Green").SendMessage("Finish"); 
    } 
} 

Я изменил обнаружение столкновений с непрерывным на RigidBody моему это более чувствительным не повезло , Сделал куб толще. Нет, он просто продолжает тикать. Автомобиль «Зеленый» находится в индексированном контейнере/пустом игровом объекте. Это сетевая многопользовательская игра, поэтому ее, вероятно, следует переписать, чтобы найти игровой объект с тегом, игроком. Или каким-то образом первый помеченный игровой объект входит в триггер. Я думаю, что проблема - «Отправить сообщение». Я никогда с этим не работала. Изменение цвета текста также не сработало, но его необходимо изменить, чтобы включить частицы конфетти, когда таймер остановится. Любая помощь будет принята с благодарностью.

+1

Вы смогли решить предлагаемые решения? – GLES

ответ

2

Есть несколько проблем в вашем коде:

.your таймер не остановится, так как функция запуска обратного вызова не называют. Функция обратного вызова триггера не вызывается, потому что onTriggerEnter должен быть OnTriggerEnter с O с заглавной буквыми.

Если вы исправите это, убедитесь, что у коллайдера есть свойство IsTrigger.

.Another проблема эта линия: GameObject.Find("Green").SendMessage("Finish");

Вы вызываете функцию с именем Finish, но фактическое имя вашей функции finish из Timer класса.

Наконец, вместо того, чтобы делать GameObject.Find("Green"); в функции OnTriggerEnter, почему бы не кешировать его в функции Start, а затем повторно использовать его? GameObject.Find очень дорогой, и его много раз замедляет вашу игру.

public class WinBox : MonoBehaviour 
{ 
    GameObject green; 
    void Start() 
    { 
     green = GameObject.Find("Green"); 
    } 

    private void OnTriggerEnter(Collider other) 
    { 
     green.SendMessage("finish"); 
    } 
} 
Смежные вопросы