Unity3d 如何在按键装置上启动计时器3D

Unity3d 如何在按键装置上启动计时器3D,unity3d,Unity3d,我有以下代码: 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 使用UnityEngine.UI; 公共类计时器:单行为 { 公共文本timerText; 公开文本投票结果; 公众投票; //公众投票; 私人住宅; 私人布尔计时; 私有bool timesUp=false; 私人浮动时间; //用于初始化 无效开始() { votingResults.enabled=false; timerText.text=“按空格开始投票”; tim

我有以下代码:

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.UI;
公共类计时器:单行为
{
公共文本timerText;
公开文本投票结果;
公众投票;
//公众投票;
私人住宅;
私人布尔计时;
私有bool timesUp=false;
私人浮动时间;
//用于初始化
无效开始()
{
votingResults.enabled=false;
timerText.text=“按空格开始投票”;
timerIsRunning=false;
objectdestructed=false;
timesUp=false;
时间=时间。时间;
}
//每帧调用一次更新
无效更新()
{
if(Input.GetKeyDown(“空格”))
{
Log(“函数正在正确运行”);
时间=时间。时间;
timerIsRunning=true;
votingResults.enabled=true;
}
如果(!objectdestromed&&timerIsRunning)
{
float votinEndingTime=投票周期-Time.Time;
字符串分钟=((int)votinEndingTime/60).ToString();
字符串秒=(votinEndingTime%60).ToString(“f0”);
timerText.text=“投票在:“+”\n“+秒后结束;
如果(votinEndingTime<0)
{
objectdestromed=true;
销毁(timerText);
}
}
}
}
正在添加到对象的。问题是,计时器在场景开始时启动,而不是在按下空间时启动。我不确定我做错了什么。任何帮助都将不胜感激

如果有不清楚或需要更多解释的地方,请在评论中告诉我


谢谢

,因为您使用游戏中的当前时间
Time.Time
计算
votingEndingTime
,减去它没有意义。您必须像这样使用时间
空间
,并向其添加
周期投票
,以查找投票何时结束:

float votinEndingTime = periodToVote + time;
因为
time
是按下
Space
时的值

然后您可以检查时间是否已到,如下所示:

if(Time.time > votingEndingTime)
{
    objectDestroyed = true;
    Destroy(timerText);
}

与在
Update
中执行此操作不同,我建议使用一种新的方法,并且仅在满足条件的情况下在
Update
中启动它。。这使得它有点节省,更容易控制

公共类计时器:单行为
{
公共文本timerText;
公开文本投票结果;
公众投票;
私人住宅正在运行;
//用于初始化
私有void开始()
{
votingResults.enabled=false;
timerText.text=“按空格开始投票”;
}
私有IEnumerator运行计时器()
{
isRunning=true;
var passedTime=0.0f;
while(通过时间<投票周期)
{
字符串minutes=Mathf.RoundToInt((periodToVote-passedTime)/60.ToString();
string seconds=Mathf.RoundToInt(periodtovate-passedTime).ToString(“f0”);
timerText.text=“投票在:“+”\n“+秒后结束;
passedTime+=Time.deltaTime;
收益返回空;
}
销毁(timerText);
}
//每帧调用一次更新
私有无效更新()
{
if(if(!isRunning)&&Input.GetKeyDown(KeyCode.Space))
{
Log(“Sarting计时器”);
votingResults.enabled=true;
start例程(RunTimer());
}
}
}

谢谢你的回答。但是,我觉得有点不对劲,因为过去的时间总是一样的。很抱歉,我完全忘记了
passedTime+=Time.deltaTime之前的
收益
非常感谢。工作起来很有魅力!