记录区域周围经过的时间单位

问题描述

我不熟悉团结,想创建一个具有可移动对象和显示网格的场景。当对象移动到网格区域时,我希望它记录在网格上花费的时间,一旦它离开指定的网格区域,我想接收它在网格中花费的时间。我尝试使用此代码。

if (collision.gameObject.name == "GridHolder")
{
    stopwatch.Start();
    isInSection1 = true;
    isInSection2 = false;
    Debug.Log("In area");
    if (!(collision.gameObject.name == "GridHolder"))
    {
        stopwatch.Stop();
        Debug.Log("Left area");
        Debug.LogFormat("Time elapsed: {0}",stopwatch.Elapsed);

    }
}

我已经尝试过了,它不会显示时间。我测试了它是否确实在第一个if语句中使用了经过时间的语句来记录时间。当我将物体带回该区域时,它会记录时间并继续记录和消逝时间。

解决方法

秒表功能不会暂停您的代码/等待,因此您将检查是否永远不会运行剩余的游戏对象,因为ifstatement仅在您运行第一个ifstatement时才运行(基本上它将始终为false)。

if(collision.gameObject.name == "GridHolder"){
    if (!(collision.gameObject.name == "GridHolder")){
        //This if statement will never run,as the previous if statement contradicts this one.
}

您应该使用OnTriggerEnterOnTriggerExit来启动和停止秒表。

,

要扩展ChilliPenguin(14082731)的答案,您的代码永远不会到达内部的原因是,因为您的条件指定,为了运行外部代码块,对撞机必须是您的网格,然后按顺序要运行内部代码块,对撞机也不能是您的网格。具体来说,您是说要到达内部障碍物,对撞机必须

  1. 成为网格
  2. 不是网格

同时,我敢肯定,你会说这永远不会发生。相反,您想要的是一种使用Collider.OnCollisionEnter(Collision)来告诉对象何时开始接触网格的方法,并在发生时启动秒表。然后,您想使用Collider.OnCollisionExit(Collision)来告诉对象何时停止接触网格,并在发生这种情况时停止秒表。因此,以某种形式,您将拥有类似的东西,

/* ... */
void OnCollisionEnter(Collision collision) {
    if (collision.gameObject.name == "GridHolder") {
        stopwatch.Start();
        Debug.Log("In area");
    }
}

void OnCollisionExit(Collision collision) {
    if (collision.gameObject.name == "GridHolder") {
        stopwatch.Stop();
        Debug.Log("Left area");
        Debug.LogFormat("Time elapsed: {0}",stopwatch.Elapsed);
    }
}
/* ... */

如果您想知道何时进入/离开某个区域而不是开始/停止触摸网格,可以使用triggers instead的对撞机,但前提是相同的。 / p>

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...