Счетчик времени для вашего проекта

Эта история произошла пятнадцатого июня прошлого года, за окном была ночь. Сильный ветер уничтожил спутниковую тарелку, любимые телевизионные передачи оказались вне его пространства и времени. Отчаяние заполняло разум. Оставался единственный вариант действия, нажать кнопку, чтобы включить компьютер и чтобы поиграть. Спустя некоторое время, нужно идти спать, подумал он, но уже шесть утра, было уже поздно… Короче, речь идет о счетчике времени для игры, штука весьма полезная, таки хорошо, если есть возможность узнать, сколько играешь, хотя бы для статистики.

Создайте C# скрипт GameTime:

using System.Collections;
using UnityEngine.UI;
using UnityEngine;
[RequireComponent(typeof(Text))]
public class GameTime : MonoBehaviour
{
    private Text _textTime;
    private int hour, min, sec;
    private string h, m, s;
    private static GameTime _inst;

    void Awake()
    {
        _inst = this;
        _textTime = GetComponent<Text>();
        StartCoroutine(RepeatingFunction());
    }

    public static void StopTime()
    {
        _inst.Stop_inst();
    }

    public static void StartTime()
    {
        _inst.Start_inst();
    }

    void Stop_inst()
    {
        StopAllCoroutines();
        sec = 0;
        min = 0;
        hour = 0;
        _textTime.text = "00:00:00";
    }

    void Start_inst()
    {
        StartCoroutine(RepeatingFunction());
    }

    IEnumerator RepeatingFunction()
    {
        while (true)
        {
            TimeCount();
            yield return new WaitForSeconds(1);
        }
    }

    void TimeCount()
    {
        if (sec > 59)
        {
            sec = 0;
            min++;
        }
        if (min > 59)
        {
            min = 0;
            hour++;
        }
        if (hour > 23)
        {
            hour = 0;
        }

        if (sec < 10) s = "0" + sec; else s = sec.ToString();
        if (min < 10) m = "0" + min; else m = min.ToString();
        if (hour < 10) h = "0" + hour; else h = hour.ToString();

        sec++;

        _textTime.text = h + ":" + m + ":" + s;
    }
}

Для использования, повесьте его на текстовый элемент GameObject > UI > Text.

Чтобы остановить и сбросить время из любого другого скрипта:

GameTime.StopTime();

А чтобы заново запустить время:

GameTime.StartTime();

Скачать скрипт:
Внимание! Посетители, находящиеся в группе Гости, не могут скачивать файлы.

Комментариев 4

Офлайн
Zavulon Zav 26 мая 2017
Добрый день, во первых спасибо Вам за все примеры на сайте, ваш контент очень помогает мне разбираться в тонкостях не только движка но и кодинга!
Хочу использовать подобный счетчик времени в своем проекте, но есть несколько нюансов, и самый критичный это масштаб времени, по умолчанию в проекте он равен трем, получается что этот код работает и считает время быстрее реального, не могли бы вы подсказать мне, как исключить влияния масштаба времени в проекте на данный скрипт?
Офлайн
Light 27 мая 2017
Zavulon Zav, имеется ввиду Time.timeScale = 0?
В этом случаи, можно немного изменить метод RepeatingFunction на:

IEnumerator RepeatingFunction()
{
	while(true) 
	{
		float startTime = Time.unscaledTime;

		while(Time.unscaledTime < startTime + 1f)
		{
			yield return null;

		}

		TimeCount();
	}
}
Офлайн
xatabov 11 августа 2019
Light,
если вы еще тут))не могли бы помочь,как сделать чтобы секундомер отключался ?))((а то у мя секундомер который вечно идет,вроде играешь уже победил)а время все идет((хотелось бы чтобы он запускался при старте уровня и завершался,когда переходишь на след уровень(т.е. др сцену)я еще новичок прост)
Офлайн
Light 11 августа 2019
xatabov, статья обновлена, там ответы.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Яндекс.Метрика