C#Timer不会在触发器输入时停止

时间:2016-09-04 00:23:48

标签: c# unity3d timer triggers

我有一个非常简单的脚本,在Unity 5 UI上显示一个计时器。在终点线处,赛车手进入扳机并且计时器应该停止。它没有。我没有错,只是像阿甘正传一样!如果我可以停止计时器,我打算将计时器结果发布到排行榜。这是我的计时器脚本:

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

}

在触发的多维数据集上,我放置了以下脚本:

using UnityEngine;
using System.Collections;

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

我已经将碰撞检测改为连续对刚体进行更加敏感而没有运气。使立方体变厚。不,它只是继续滴答作响。车辆“绿色”位于索引容器/空游戏对象中。它是一个联网的多人游戏,所以它应该被重写以找到带有标签,玩家的游戏对象。或者不知何故,第一个标记的游戏对象进入触发器。我认为问题是“发送消息”我从未使用过。文本颜色更改也不起作用,但需要更改以在计时器停止时启用五彩纸屑颗粒。任何协助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您的代码中存在一些问题:

1 。您的计时器不会停止,因为触发器回调函数被调用。未调用触发器回调函数,因为onTriggerEnter应该是OnTriggerEnterO大写。

解决此问题后,请确保对撞机的IsTrigger属性也已选中/启用。

2 。另一个问题是这一行: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");
    }
}