C# Game Programming Cookbook for Unity 3D / Программирование игр на Unity 3D C#. Книга готовых решений.: 2.2.1.1 Разбор скрипта
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Многие из ключевых функций в BaseGameController.cs являются виртуальными и включены в качестве установленного протокола для работы с различными типами игровой деятельности. То есть, они не содержат кода в данном файле, однако планируется, что вы переназначите их в свои собственные полученные версии игрового контроллера в дальнейшем. ilia1395 25.10.14 в 16:18 |
|
|
Класс BaseGameController наследуется от MonoBehavior, так что он может задействовать автоматически называемые системные функции, такие как: Awake(), Start(), Update(), and FixedUpdate(): ilia1395 25.10.14 в 16:20 |
||
|
public class BaseGameController : MonoBehavior Zeke0028 25.09.14 в 03:03 |
||
|
Функции находятся здесь в качестве заполнителей. Цель состоит, что скрипты игрового контроллера будут использованы для реальных игровых проектов и извлекут из этого класса эти заполняющие интерфейсные функции (*с функциональностью*): ilia1395 25.10.14 в 16:27 |
||
|
bool paused; Zeke0028 25.09.14 в 03:03 |
||
|
Другие функции в BaseGameController, чтобы помочь превратить игру по всему быстрее. Если есть вещи, которые вы используете в различных играх, это может сэкономить время, чтобы включить их всех в сценарии, например эти, из которых можно вывести все остальные контроллеры игры. Это избавляет от необходимости переписывать один и тот же код снова и снова в нескольких проектах. Одним из таких примеров является функция Explode (), которая делает как раз это: ilia1395 25.10.14 в 16:34 |
||
|
public void Explode ( Vector3 aPosition ) Zeke0028 25.09.14 в 03:03 |
||
|
Все Explode () делают этот экземпляр ("instantiate") игрового объекта ("GameObject") в положении передаваемом функцией вызывающего абонента. Последующие версии игрового контроллера скриптов будут использовать отдельный менеджер спавна, для работы с экземплярами ("instantiation"), но на этой стадии он существует просто в качестве общего, насколько это возможно, не будучи зависимыми от каких-либо других скриптов. ilia1395 25.10.14 в 16:50 |
||
|
После Explode, мы видим еще 2 пустые функции, которые используются чтобы сказать игровому контроллеру когда регулярные враги будут уничтожены и когда босс будет уничтожен: ilia1395 25.10.14 в 16:56 |
||
|
public virtual void EnemyDestroyed( Vector3 aPosition, int Zeke0028 25.09.14 в 03:04 |
||
|
Во всех играх нам нужны некоторые функции, такие как кнопки перезагрузки и функции паузы. В своей простейшей форме: ilia1395 25.10.14 в 17:00 |
||
|
public virtual void RestartGameButtonPressed() Zeke0028 25.09.14 в 03:04 |
||
|
RestartGameButtonPressed () использует Application.LoadLevelfunction в Unity, чтобы обновить текущую сцену. Application.loadedLevelNamereturns строку со ссылкой на имя сцены загруженной на данный момент игры в память. Вы также можете получить индексный номер ссылки на сцене с Application.levelName. Этот индекс связывается с тем, как сцены организованы в параметрах сборки (File → Build Settings), а это означает, что переход вещи в настройках сборки может повлиять на работу вашей игры, если вы решите использовать индексные номера чтобы ссылаться на конкретные сцены в дальнейшем. Чтобы избежать путаницы, я предпочитаю придерживаться названий, когда я имею дело с загрузкой уровня(сцен). ilia1395 25.10.14 в 17:07 |
||
|
Финальная часть BaseGameController это работа с механикой паузы и снятия с паузы игры: ilia1395 25.10.14 в 17:10 |
||
|
public bool Paused Zeke0028 25.09.14 в 03:04 |
||
|
Переменная Bool с именем paused сохраняет состояние паузы внутри игры. Вместо того, чтобы обеспечить прямой доступ к ней, функция getter-setter используется таким образом, что мы можем действовать без необходимости следить за состоянием изменений . ilia1395 25.10.14 в 17:23 |
||
|
"Get" часть просто *возвращает* булевскую переменную паузы. ilia1395 25.10.14 в 17:24 |
||
|
Set часть *задает* булевскую переменную паузы и устанавливает Time.timeScale либо 0 (если на паузе) или 1 (если сняли с паузы). Установка Time.timeScale влияет как проходит время. Например, установка временных рамок до 0,5 будет означать, что время будет проходить в 2 раза медленнее, чем в реальном времени. ilia1395 25.10.14 в 17:31 |
||
|
За исключением realtimeSinceStartup, timeScale класс переменных Time влияет на измерения всего времени и времени дельты (delta time). Если у вас ниже timeScale, рекомендуется также ниже Time.fixedDeltaTime. ilia1395 25.10.14 в 17:40 |
||
|
Обычно в видеоигре должны отобразится какие-нибудь сообщения, что бы сказать игроку, что игра остановлена, но на этом этапе, скрипт показывает чисто механику паузы, и мы будем помнить это. ilia1395 25.10.14 в 17:46 |
