我有一个非常简单的脚本,在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");
}
}
我已经将碰撞检测改为连续对刚体进行更加敏感而没有运气。使立方体变厚。不,它只是继续滴答作响。车辆“绿色”位于索引容器/空游戏对象中。它是一个联网的多人游戏,所以它应该被重写以找到带有标签,玩家的游戏对象。或者不知何故,第一个标记的游戏对象进入触发器。我认为问题是“发送消息”我从未使用过。文本颜色更改也不起作用,但需要更改以在计时器停止时启用五彩纸屑颗粒。任何协助将不胜感激。
答案 0 :(得分:2)
您的代码中存在一些问题:
1 。您的计时器不会停止,因为触发器回调函数不被调用。未调用触发器回调函数,因为onTriggerEnter
应该是OnTriggerEnter
,O
大写。
解决此问题后,请确保对撞机的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");
}
}