2014-11-13 5 views
2

Я хотел бы создать счетчик времени для моей игры Unity 3D.Как создать счетчик времени с использованием C# в Unity 3D

Я уже пытался использовать Time.time, но я не могу сбросить таймер без перезагрузки всей игры. timeSinceLevelLoad не работает для меня, потому что требуется перезагрузка уровня.

Я попытался использовать Time.deltaTime внутри FixedUpdate, но я чувствую, что время не правильное. Поэтому я не могу перезагрузить игру или уровень, что я сделал свое состояние машины, чтобы быть одна сцена только:

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; 
} 

Моим вопрос: Как я могу создать прогрессивный счетчик времени, который можно сбросить без необходимости перезагрузки игры, сцены или уровня?

ответ

0

В начале игры вы экономите startTime, тогда вы решаете, как долго должен длиться раунд, roundTime.

Пример:

startTime = Time.time; 
roundTime = 1000f; // seconds. 

Тогда вы можете просто проверить, когда время прошло.

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

Использовать вместо StopWatch. Они просты в использовании:

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(); 

см: http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.elapsed(v=vs.110).aspx более информации о StopWatch

0

Вы можете использовать закрытую переменную для отслеживания времени.

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; 
} 

Вы можете установить или сбросить этот поплавок, когда вам нужно.

Смежные вопросы