Добавить в корзинуПозвонить
Найти в Дзене

Стратегия мечты – игровое время.

Стратегия мечты – игровое время. Приветствую, дорогие друзья! Итак, продолжаю делать публикации по разработке глобальной стратегии на движке Unity. В этой статье я хочу разобрать игровое время, создать логику управление временем, увеличение и уменьшение скорости течения времени в игре, пауза. Для начала создадим кнопки по управлению временем и текстовое поле, в котором будет отображаться игровая дата. Затем, естественно, надо создать скрипт, который этим временем будет управлять. using TMPro; using UnityEngine; using UnityEngine.UI; public class GameTime : MonoBehaviour { [SerializeField] private TextMeshProUGUI _dayText; [SerializeField] private TextMeshProUGUI _monthText; [SerializeField] private TextMeshProUGUI _yearText; [SerializeField] private Button _x0Button; [SerializeField] private Button _x1Button; [SerializeField] private Button _x2Button; [SerializeField] private Button _x3Button; [SerializeField] private Button _x4Button; private float_daysPassed = 1; private int_monthsPa

Стратегия мечты – игровое время.

Приветствую, дорогие друзья! Итак, продолжаю делать публикации по разработке глобальной стратегии на движке Unity.

В этой статье я хочу разобрать игровое время, создать логику управление временем, увеличение и уменьшение скорости течения времени в игре, пауза.

Для начала создадим кнопки по управлению временем и текстовое поле, в котором будет отображаться игровая дата.

Затем, естественно, надо создать скрипт, который этим временем будет управлять.

using TMPro;

using UnityEngine;

using UnityEngine.UI;

public class GameTime : MonoBehaviour

{

[SerializeField] private TextMeshProUGUI _dayText;

[SerializeField] private TextMeshProUGUI _monthText;

[SerializeField] private TextMeshProUGUI _yearText;

[SerializeField] private Button _x0Button;

[SerializeField] private Button _x1Button;

[SerializeField] private Button _x2Button;

[SerializeField] private Button _x3Button;

[SerializeField] private Button _x4Button;

private float_daysPassed = 1;

private int_monthsPassed = 1;

private int_yearsPassed = 1;

private string[] _monthNames = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };

private int[] _daysInMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

private float_timeScale = 1f;

private void Start()

{

_timeScale = 0;

_x0Button.onClick.AddListener(OnX0ButtonPressed);

_x1Button.onClick.AddListener(OnX1ButtonPressed);

_x2Button.onClick.AddListener(OnX2ButtonPressed);

_x3Button.onClick.AddListener(OnX3ButtonPressed);

_x4Button.onClick.AddListener(OnX4ButtonPressed);

UpdateTimeUI();

}

// Update is called once per frame

private void Update()

{

UpdateGameTime();

UpdateTimeUI();

}

private voidUpdateGameTime()

{

if (_timeScale > 0)

{

_daysPassed += Time.deltaTime * _timeScale;

if (_daysPassed > _daysInMonth[_monthsPassed - 1] + 1)

{

_monthsPassed++;

_daysPassed = 1;

if (_monthsPassed > 12)

{

_yearsPassed++;

_monthsPassed = 1;

}

}

}

}

private voidUpdateTimeUI()

{

string formattedDays = Mathf.FloorToInt(_daysPassed).ToString();

_dayText.text = formattedDays;

string formattedMonths = _monthNames[_monthsPassed - 1];

_monthText.text = formattedMonths;

string formattedYears = _yearsPassed.ToString("D4");

_yearText.text = formattedYears;

}

private voidOnX0ButtonPressed()

{

_timeScale = 0;

}

private voidOnX1ButtonPressed()

{

_timeScale = 0.5f;

}

private voidOnX2ButtonPressed()

{

_timeScale = 1f;

}

private voidOnX3ButtonPressed()

{

_timeScale = 2f;

}

private voidOnX4ButtonPressed()

{

_timeScale = 4f;

}

public floatGetTimeScale()

{

return _timeScale;

}

public voidSetTimeScale(floattimeScale)

{

_timeScale = timeScale;

}

}

Первым делом мы передаем текстовые поля для отображения даты и кнопки для управления временем. Затем у нас следует массив названий месяцев и количество дней в каждом месяце. И самый главный параметр в этом скрипте - private float _timeScale = 1f , им мы будем управлять скоростью нашего игрового времени. То есть логика следующая на страте игры у нас время стоит на паузе _timeScale = 0; затем при нажатии на любую из кнопок [SerializeField] private Button _x1Button;

[SerializeField] private Button_x2Button;

[SerializeField] private Button_x3Button;

[SerializeField] private Button _x4Button; происходит запуск игрового времени – вызывается метод UpdateGameTime() и UpdateTimeUI() . Вот такая незамысловатая логика получилась.

Вот как это выглядит в игре –

-2

Придет апрель – «а он придет и принесет за собой весну и рассеет серых туч войска …» )))

Ну я думаю, с этим вопросом разобрались! Увидимся в следующей публикации!