Timer 如何在Unity 3D中使用C#创建时间计数器

Timer 如何在Unity 3D中使用C#创建时间计数器,timer,unity3d,unityscript,Timer,Unity3d,Unityscript,我想为我的Unity 3D游戏创建一个时间计数器 我已经尝试过使用Time.Time,但如果不重置整个游戏,我无法重置计时器。timeSinceLevelLoad对我也不起作用,因为需要重新加载该级别 我试着在FixedUpdate中使用Time.deltaTime,但我觉得时间不对。我无法重新加载游戏或关卡的原因是我将我的机器状态设置为仅一个场景: switch (currentState) { case GameStates.START:{ play

我想为我的Unity 3D游戏创建一个时间计数器

我已经尝试过使用Time.Time,但如果不重置整个游戏,我无法重置计时器。timeSinceLevelLoad对我也不起作用,因为需要重新加载该级别

我试着在FixedUpdate中使用Time.deltaTime,但我觉得时间不对。我无法重新加载游戏或关卡的原因是我将我的机器状态设置为仅一个场景:

switch (currentState) {

        case GameStates.START:{
            player.position = startPositionPlayer;
            currentState = GameStates.WAITGAME;
            timeScore.renderer.enabled = false;
        }
            break;

        case GameStates.WAITGAME:{
            player.position = startPositionPlayer;
            timeScore.renderer.enabled = false;
        }
            break;

        case GameStates.INGAME:{
            time = Time.time;
            timeScore.text = time.ToString();
        }
            break;  

        case GameStates.GAMEOVER:{
            currentState = GameStates.RANKING;
            player.position = startPositionPlayer;
            enemy.position = startPositionEnemy;
            timeScore.renderer.enabled = false;
        }
            break;

        case GameStates.RANKING:{
            player.position = startPositionPlayer;
            enemy.position = startPositionEnemy;
            timeScore.renderer.enabled = false;
        }
            break;
        }
    } 
所以我的整个游戏在一个场景中运行。此功能用于使用GameStates重新启动游戏。INGAME:

public void StartGame(){
    time = 0f;
    timeScore.renderer.enabled = true;
    currentState = GameStates.INGAME;
} 

我的问题是:如何创建一个渐进式时间计数器,无需重新加载游戏、场景或关卡即可重置?使用
秒表
。它们易于使用:

Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();

//Your game

stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
在代码中,替换启动计数器的代码:

/*
 * Replace
 */
time = 0f;
timeScore.renderer.enabled = true;
/* 
 * By
 */
time = new Stopwatch();
time.Start();
以及阻止它的代码:

/*
 * Replace
 */
time = Time.time;
timeScore.text = time.ToString();
/* 
 * By
 */
stopWatch.Stop();
timeScore.text = stopWatch.Elapsed.ToString();

请参阅:有关秒表的更多信息,请在游戏开始时保存
开始时间
,然后决定一轮应持续多长时间,
roundTime

例如:

startTime = Time.time;
roundTime = 1000f; // seconds.
然后,您可以简单地检查时间是否已过

function Update ()
{
    if (Time.time - startTime >= roundTime)
    {
        // Game ended, restart.
        startTime = Time.time;
    }
}

您可以使用私有变量来跟踪时间

public float RoundLength = 30f;

private float timeKeeper;
private bool isPaused = false;
private bool gameIsOver = false;

void Start() {
    this.timeKeeper = this.RoundLength;
}

void Update() {
    if (!this.isPaused && !this.gameIsOver) {
        this.timeKeeper -= Time.deltaTime;

        if (this.timeKeeper < 0f) DoGameOver();
    }
}

void DoGameOver() {
    this.gameIsOver = true;
}
public float RoundLength=30f;
私人浮动计时器;
private bool isPaused=假;
private bool GameiOver=假;
void Start(){
this.timeKeeper=this.RoundLength;
}
无效更新(){
如果(!this.isPaused&!this.gameIsOver){
this.timeKeeper-=Time.deltaTime;
如果(此计时器<0f)DoGameOver();
}
}
void DoGameOver(){
this.gameIsOver=true;
}
您可以随时设置或重置该浮动