我正在制作和游戏一样挖掘它的功能所以我需要计时器,它将计算精确的浮点数(以秒为单位),然后销毁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);
}
}
答案 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,但这是继续
的想法