挖掘技术计数器

时间:2015-02-05 18:52:22

标签: unity3d while-loop unityscript

我正在制作和游戏一样挖掘它的功能所以我需要计时器,它将计算精确的浮点数(以秒为单位),然后销毁gameObject。这就是我现在尝试过的,但它是团结一致的:

function Update()
{

if (Input.GetMouseButtonDown(0))
{
                        digTime = 1.5; // in secounds
                  }
                  while (!Input.GetMouseButtonUp(0)) // why is this infinite loop?
                  {               
                  digtime -= Time.deltaTime;
                  if (digtime <= 0)
                  {
                  Destroy(hit.collider.gameObject);
                  }
        }

2 个答案:

答案 0 :(得分:1)

以下是一个基本示例,您可以检查玩家是否在特定时间段内点击过。

#pragma strict

// This can be set in the editor
var DiggingTime = 1.5;

// Time when last digging started
private var diggingStarted = 0.0f;

function Update () {
    // On every update were the button is not pressed reset the timer
    if (!Input.GetMouseButton(0))
    {
        diggingStarted = Time.timeSinceLevelLoad;
    }

    // Check if the DiggingTime has passed from last setting of the timer
    if (diggingStarted + DiggingTime < Time.timeSinceLevelLoad)
    {
        // Do the digging things here
        Debug.Log("Digging time passed");

        // Reset the timer
        diggingStarted = Time.timeSinceLevelLoad;
    }
}

即使玩家按下按钮,它也会每隔DiggingTime秒触发一次。如果你想要播放器需要释放按钮并再次按下,一个解决方案就是添加布尔值来告知定时器是否打开。它可以在GetMouseButtonDown上设置为true,在GetMouseButtonUp上设置为false。

答案 1 :(得分:0)

每帧调用更新功能。如果在此函数中添加while循环等待mouseButtonUp,您肯定会冻结Unity。

您不需要while循环。只需在没有while循环的情况下检查GetMouseButtonUp。

修改

这是更新功能:

void Update ()
{
    if ( Input.GetMouseButtonDown( 0 ) )
    {
        digTime = 1.5f;
    }
    else if ( Input.GetMouseButton( 0 ) )
    {
        if ( digTime <= 0 )
        {
            Destroy( hit.collider.gameObject );
        }
        else
        {
            digTime -= Time.deltaTime;
        }
    }
}

应该添加次要控件以避免多次破坏gameObject,但这是继续

的想法