Как обнулить таймер ? - Форум Игроделов
Пт, 17 Май 2024, 05:01 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Как обнулить таймер ? (Скрипт есть)
Как обнулить таймер ?
AIDENДата: Вт, 29 Июл 2014, 19:19 | Сообщение # 1
Нет аватара
 
Сообщений: 59
Награды: 0
Репутация: 56
Статус: Offline
У меня есть скрипт таймера обратного отсчёта :
Код

var style : GUIStyle;  
private  var startTime : float;
private  var restSeconds : float;
private  var roundedRestSeconds : int;
private  var displaySeconds : float;
private  var displayMinutes : float;
var CountDownSeconds : int=120;
private  var Timeleft : float;
var timetext : String;

function Start () {

     startTime=Time.deltaTime;
   
}
   
function OnGUI ()  {
  GUI.skin.label = style;
           
     Timeleft= Time.time-startTime;
   
     restSeconds = CountDownSeconds-(Timeleft);
   
roundedRestSeconds=Mathf.CeilToInt(restSeconds);
displaySeconds = roundedRestSeconds % 60;
displayMinutes = (roundedRestSeconds / 60)%60;
   
timetext = (displayMinutes.ToString()+":");
if (displaySeconds > 9)
{
     timetext = timetext + displaySeconds.ToString();
}
else  
{
     timetext = timetext + "0" + displaySeconds.ToString();
}
GUI.Label(new Rect(Screen.width/2, 0.0f, 100.0f, 75.0f), timetext);
     }

Проблема в том что я не могу сбросить таймер. Я в принципе уже всё пробовал, перезагружал сцену, удалял и снова добавлял скрипт к объекту, делал что-бы при нажатии на кнопку время возвращалось в начальное значение, но так нечего и не вышло. Хотел спросить у вас как это решить, может быть вы тоже сталкивались с таким ?


Моя игра - Collect Fruit
 
СообщениеУ меня есть скрипт таймера обратного отсчёта :
Код

var style : GUIStyle;  
private  var startTime : float;
private  var restSeconds : float;
private  var roundedRestSeconds : int;
private  var displaySeconds : float;
private  var displayMinutes : float;
var CountDownSeconds : int=120;
private  var Timeleft : float;
var timetext : String;

function Start () {

     startTime=Time.deltaTime;
   
}
   
function OnGUI ()  {
  GUI.skin.label = style;
           
     Timeleft= Time.time-startTime;
   
     restSeconds = CountDownSeconds-(Timeleft);
   
roundedRestSeconds=Mathf.CeilToInt(restSeconds);
displaySeconds = roundedRestSeconds % 60;
displayMinutes = (roundedRestSeconds / 60)%60;
   
timetext = (displayMinutes.ToString()+":");
if (displaySeconds > 9)
{
     timetext = timetext + displaySeconds.ToString();
}
else  
{
     timetext = timetext + "0" + displaySeconds.ToString();
}
GUI.Label(new Rect(Screen.width/2, 0.0f, 100.0f, 75.0f), timetext);
     }

Проблема в том что я не могу сбросить таймер. Я в принципе уже всё пробовал, перезагружал сцену, удалял и снова добавлял скрипт к объекту, делал что-бы при нажатии на кнопку время возвращалось в начальное значение, но так нечего и не вышло. Хотел спросить у вас как это решить, может быть вы тоже сталкивались с таким ?

Автор - AIDEN
Дата добавления - 29 Июл 2014 в 19:19
commandobyДата: Вт, 29 Июл 2014, 20:21 | Сообщение # 2
Unity 3D Free
 
Сообщений: 836
Награды: 3
Репутация: 211
Статус: Offline
Я не разобрался как работает твой таймер (недостаточно знаний), но не лучше ли просто от переменной отнимать 1 в секунду?
Код
roundedRestSeconds -= Time.deltaTime;
displaySeconds = roundedRestSeconds%60;  
displayMinutes = roundedRestSeconds/60%60;
А уже такую переменную обнуляй, изменяй, ускоряй, замедляй, что ещё в голову прийдёт.

Добавлено (29 Июл 2014, 20:21)
---------------------------------------------

Цитата
function Start () {
startTime=Time.deltaTime;
}

А почему именно в стартовой функции, ведь "Time.deltaTime" - не постоянная переменная, а значит таймер будет не верно работать.


Блог.

Сообщение отредактировал commandoby - Вт, 29 Июл 2014, 20:17
 
СообщениеЯ не разобрался как работает твой таймер (недостаточно знаний), но не лучше ли просто от переменной отнимать 1 в секунду?
Код
roundedRestSeconds -= Time.deltaTime;
displaySeconds = roundedRestSeconds%60;  
displayMinutes = roundedRestSeconds/60%60;
А уже такую переменную обнуляй, изменяй, ускоряй, замедляй, что ещё в голову прийдёт.

Добавлено (29 Июл 2014, 20:21)
---------------------------------------------

Цитата
function Start () {
startTime=Time.deltaTime;
}

А почему именно в стартовой функции, ведь "Time.deltaTime" - не постоянная переменная, а значит таймер будет не верно работать.

Автор - commandoby
Дата добавления - 29 Июл 2014 в 20:21
AIDENДата: Вт, 29 Июл 2014, 22:18 | Сообщение # 3
Нет аватара
 
Сообщений: 59
Награды: 0
Репутация: 56
Статус: Offline
Я сам не могу полностью понять скрипт (( Я его нашёл на официальном форуме. Надо попробовать самому написать, может что-то получится ))

Моя игра - Collect Fruit
 
СообщениеЯ сам не могу полностью понять скрипт (( Я его нашёл на официальном форуме. Надо попробовать самому написать, может что-то получится ))

Автор - AIDEN
Дата добавления - 29 Июл 2014 в 22:18
commandobyДата: Вт, 29 Июл 2014, 22:59 | Сообщение # 4
Unity 3D Free
 
Сообщений: 836
Награды: 3
Репутация: 211
Статус: Offline
Вот мой пример таймера. Обнуляй как хочешь.
Код
function Start () {
roundedRestSeconds = 300;
}

function OnGUI ()  {
roundedRestSeconds -= Time.deltaTime;
  displaySeconds = roundedRestSeconds%60;   
  displayMinutes = roundedRestSeconds/60%60;
if (displaySeconds > 9) {  
GUI.Label(Rect(Screen.width/2-50, 5, 100, 20), ""+displayMinutes+" : "+displaySeconds);  
} else {  
GUI.Label(Rect(Screen.width/2-50, 5, 100, 20), ""+displayMinutes+" : 0"+displaySeconds);  
}
}


Блог.
 
СообщениеВот мой пример таймера. Обнуляй как хочешь.
Код
function Start () {
roundedRestSeconds = 300;
}

function OnGUI ()  {
roundedRestSeconds -= Time.deltaTime;
  displaySeconds = roundedRestSeconds%60;   
  displayMinutes = roundedRestSeconds/60%60;
if (displaySeconds > 9) {  
GUI.Label(Rect(Screen.width/2-50, 5, 100, 20), ""+displayMinutes+" : "+displaySeconds);  
} else {  
GUI.Label(Rect(Screen.width/2-50, 5, 100, 20), ""+displayMinutes+" : 0"+displaySeconds);  
}
}

Автор - commandoby
Дата добавления - 29 Июл 2014 в 22:59
AIDENДата: Вт, 29 Июл 2014, 23:59 | Сообщение # 5
Нет аватара
 
Сообщений: 59
Награды: 0
Репутация: 56
Статус: Offline
Я тоже накатал такой код :
Код

static var second : int;
static var minut : int;

function Start () {
     InvokeRepeating ("Countdown", 1.0, 1.0);
     second = 13;
     minut = 0;
}

function OnGUI(){
    if(second >= 10){
    GUI.Label(Rect(125,75, 60, 20), minut + " : " + second);
    }
    if(second < 10){
    GUI.Label(Rect(125,75, 60, 20), minut + " : " + "0"+second);
    }
}

function Countdown () {
     second -= 1;
     if (second < 0){
        minut-=1;
        second = 59;
     }
     }

Только не могу понять как по окончанию времени например загрузить уровень. Пробовал проверять :
Код

if(minut = 0){
if(second < 0){
Application.LoadLevel(0)
}
}

Только видно как одна минута в минус уходит (((


Моя игра - Collect Fruit
 
СообщениеЯ тоже накатал такой код :
Код

static var second : int;
static var minut : int;

function Start () {
     InvokeRepeating ("Countdown", 1.0, 1.0);
     second = 13;
     minut = 0;
}

function OnGUI(){
    if(second >= 10){
    GUI.Label(Rect(125,75, 60, 20), minut + " : " + second);
    }
    if(second < 10){
    GUI.Label(Rect(125,75, 60, 20), minut + " : " + "0"+second);
    }
}

function Countdown () {
     second -= 1;
     if (second < 0){
        minut-=1;
        second = 59;
     }
     }

Только не могу понять как по окончанию времени например загрузить уровень. Пробовал проверять :
Код

if(minut = 0){
if(second < 0){
Application.LoadLevel(0)
}
}

Только видно как одна минута в минус уходит (((

Автор - AIDEN
Дата добавления - 29 Июл 2014 в 23:59
commandobyДата: Ср, 30 Июл 2014, 00:04 | Сообщение # 6
Unity 3D Free
 
Сообщений: 836
Награды: 3
Репутация: 211
Статус: Offline
Цитата AIDEN ()
как по окончанию времени например загрузить уровень

Код
if(minut == 0 && second == 0){  
  Application.LoadLevel(0);
  }


Блог.
 
Сообщение
Цитата AIDEN ()
как по окончанию времени например загрузить уровень

Код
if(minut == 0 && second == 0){  
  Application.LoadLevel(0);
  }

Автор - commandoby
Дата добавления - 30 Июл 2014 в 00:04
AIDENДата: Ср, 30 Июл 2014, 00:46 | Сообщение # 7
Нет аватара
 
Сообщений: 59
Награды: 0
Репутация: 56
Статус: Offline
Ой, затупил ))) Вот что вышло :
Код

static var second : int;
static var minut : int;

function Start () {
     InvokeRepeating ("Countdown", 1.0, 1.0);
     second = 13;
     minut = 0;
}

function OnGUI(){
    if(second >= 10){
    GUI.Label(Rect(125,75, 60, 20), minut + " : " + second);
    }
    if(second < 10){
    GUI.Label(Rect(125,75, 60, 20), minut + " : " + "0"+second);
    }
}

function Countdown () {
if(minut == 0 && second == 0){   
Application.LoadLevel(0);  
}else{
     second -= 1;
     if (second < 0){
        minut-=1;
        second = 59;
     }
     }
     }

Спасибо большое за помощь !


Моя игра - Collect Fruit
 
СообщениеОй, затупил ))) Вот что вышло :
Код

static var second : int;
static var minut : int;

function Start () {
     InvokeRepeating ("Countdown", 1.0, 1.0);
     second = 13;
     minut = 0;
}

function OnGUI(){
    if(second >= 10){
    GUI.Label(Rect(125,75, 60, 20), minut + " : " + second);
    }
    if(second < 10){
    GUI.Label(Rect(125,75, 60, 20), minut + " : " + "0"+second);
    }
}

function Countdown () {
if(minut == 0 && second == 0){   
Application.LoadLevel(0);  
}else{
     second -= 1;
     if (second < 0){
        minut-=1;
        second = 59;
     }
     }
     }

Спасибо большое за помощь !

Автор - AIDEN
Дата добавления - 30 Июл 2014 в 00:46
HunjethДата: Ср, 30 Июл 2014, 03:22 | Сообщение # 8
 
Сообщений: 354
Награды: 1
Репутация: 112
Статус: Offline
Твой таймер это текущее время игры в минусах, чтобы его сбросить, надо отнять от ткущего времени, время начала игры.

Код
private var gameStartTime : float;

function Reset()  {
               gameStartTime = Time.time;
}

//Timeleft= Time.time-startTime;
//замени на
Timeleft = (Time.time - gameStartTime) - startTime;


Что тебе еще не понятно??
Mathf.CeilToInt = Округлить число до 1 (0.1 = 1, 2.6 = 3, 1.9 = 2).
GUI.Label = Вывод текста на экран.

commandoby,
Цитата
А почему именно в стартовой функции, ведь "Time.deltaTime" - не постоянная переменная, а значит таймер будет не верно работать.

Потому что лаг компютера не должен влиять на время игры.
Допустим начился раунд, и у тебя лагает страшно компютер а время будет зависить от лага.
Таким образом ты будешь играть раунд 10 мин а на часах пройдет 20.


Сообщение отредактировал Hunjeth - Ср, 30 Июл 2014, 12:37
 
СообщениеТвой таймер это текущее время игры в минусах, чтобы его сбросить, надо отнять от ткущего времени, время начала игры.

Код
private var gameStartTime : float;

function Reset()  {
               gameStartTime = Time.time;
}

//Timeleft= Time.time-startTime;
//замени на
Timeleft = (Time.time - gameStartTime) - startTime;


Что тебе еще не понятно??
Mathf.CeilToInt = Округлить число до 1 (0.1 = 1, 2.6 = 3, 1.9 = 2).
GUI.Label = Вывод текста на экран.

commandoby,
Цитата
А почему именно в стартовой функции, ведь "Time.deltaTime" - не постоянная переменная, а значит таймер будет не верно работать.

Потому что лаг компютера не должен влиять на время игры.
Допустим начился раунд, и у тебя лагает страшно компютер а время будет зависить от лага.
Таким образом ты будешь играть раунд 10 мин а на часах пройдет 20.

Автор - Hunjeth
Дата добавления - 30 Июл 2014 в 03:22
AIDENДата: Ср, 30 Июл 2014, 12:23 | Сообщение # 9
Нет аватара
 
Сообщений: 59
Награды: 0
Репутация: 56
Статус: Offline
Hunjeth, спасибо за помощь. Я уже написал свой скрипт

Моя игра - Collect Fruit
 
СообщениеHunjeth, спасибо за помощь. Я уже написал свой скрипт

Автор - AIDEN
Дата добавления - 30 Июл 2014 в 12:23
Форум Игроделов » UNITY3D » СКРИПТИНГ » Как обнулить таймер ? (Скрипт есть)
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024