Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Unity_в_действии_Джозеф_Хокинг_Рус.pdf
Скачиваний:
83
Добавлен:
21.06.2022
Размер:
26.33 Mб
Скачать

32      Глава 1. Знакомство с Unity

СОВЕТ  Вкладка Project дублирует содержимое папки Assets на диске, но в общем случае не рекомендуется осуществлять удаление или перемещение файлов непосредственно в этой папке. Выполняйте эти операции на вкладке Project, а о синхронизации с папкой Assets позаботится Unity.

Вкладка Console представляет собой место, где выводятся сообщения, связанные с кодом. Иногда это намеренно вставленные вами в программу сообщения отладчика, иногда это сообщения Unity, появляющиеся при обнаружении ошибок в написанном вами сценарии.

1.3. Готовимся программировать в Unity

Теперь посмотрим, как в Unity выглядит процесс программирования. Хотя компоновка игровых ресурсов происходит в визуальном редакторе, вам потребуется управляющий ими код, обеспечивающий интерактивность игры. Unity поддерживает ряд языков программирования, в частности JavaScript и C#. У каждого из них есть свои достоинства и недостатки, хотя в этой книге все примеры представлены на языке C#.

ПОЧЕМУ C#, А НЕ JAVASCRIPT

Код всех листингов в этой книге написан на языке C#, так как он имеет ряд преимуществ перед языком JavaScript и куда меньше недостатков, особенно с точки зрения профессионального разработчика (именно этим языком я пользуюсь для работы).

Одним из преимуществ является тот факт, что язык C# строго типизирован, чего нельзя сказать о JavaScript. Среди опытных программистов в настоящее время существуют разные точки зрения по поводу того, является ли динамическая проверка типов оптимальным подходом, например к веб-разработке, но при написании программ для определенных игровых платформ (таких, как iOS) она зачастую выгодна, а порой требуется даже статическая типизация. В Unity даже добавлена директива #pragma, принудительно обеспечивающая статическую проверку типов в языке JavaScript. Хотя с технической стороны такое вполне допустимо, при этом нарушается один из основных принципов функционирования JavaScript. Поэтому лучше изначально выбрать язык со строгой типизацией.

Это всего лишь один пример того, как отличается язык JavaScript в Unity. Во многом он напоминает JavaScript в веб-браузерах, но в функционировании языка есть ряд зависящих от контекста отличий. Многие разработчики называют версию для Unity именем UnityScript, которое указывает на сходство, но одновременно и на отличие от JavaScript. Именно это состояние «аналогичный, но отличающийся» становится для программистов проблемой и при попытках применить общие знания языка JavaScript в контексте Unity, и при попытках применять на стороне знания, полученные в процессе работы в Unity.

Рассмотрим пример написания и запуска кода. Откройте Unity и создайте новый проект, выбрав в меню File команду New Project. Откроется окно диалога New Project. Укажите имя проекта и выберите, где бы вы хотели его сохранить. Unity-проект представляет собой обычную папку с файлами различных ресурсов и настроек, поэтому его можно сохранять где угодно. Щелкните на кнопке Create Project, и Unity ненадолго исчезнет, чтобы создать папку проекта.

ВНИМАНИЕ  Проекты Unity запоминают, в какой версии программы они создавались, и при попытке открыть их в другой версии появляется предупреждение. Иногда на него можно не обращать

1.3. Готовимся программировать в Unity      33

внимания (скажем, если такое предупреждение появится при открытии файлов с примерами к данной книге, просто игнорируйте его), но бывают ситуации, когда перед открытием проекта имеет смысл сделать его резервную копию.

Когда Unity появится снова, вы увидите пустую сцену. А теперь посмотрим, как в Unity запускаются программы.

1.3.1. Запуск кода в Unity: компоненты сценария

Выполнение кода в Unity всегда начинается с файлов, связанных с объектом сцены. В конечном счете все это часть упомянутой ранее компонентной системы; игровые объекты строятся как наборы компонентов, и каждый такой набор может включать в себя исполняемый сценарий.

ПРИМЕЧАНИЕ  В терминологии Unity файлы с кодом принято называть сценариями, используя для определения этого слова значение, чаще всего применяемое к ситуации, когда в браузере запускается JavaScript: код выполняется внутри игрового движка Unity, а не фигурирует после компиляции в виде самостоятельного фрагмента. Но зачастую люди определяют данный термин совсем по-другому. К примеру, сценариями иногда называют автономные служебные программы. Сценарии в Unity больше напоминают индивидуальные классы ООП. Присоединенные к объектам сцены сценарии являются экземплярами объектов.

Как вы, наверное, догадались из этого описания, сценарии в Unity представляют собой компоненты. Но прошу заметить, не все сценарии, а только наследующие от класса MonoBehaviour, базового класса компонентов-сценариев. Этот класс определяет способ присоединения компонентов к игровым объектам (как показано в листинге 1.1). Наследование от данного класса дает пару автоматически добавляемых методов, которые вы можете переопределить. Это метод Start(), вызываемый при активации объекта (а она, как правило, наступает после загрузки содержащего объект уровня), и метод Update(), вызываемый в каждом кадре. Соответственно, ваш код запускается, когда вы помещаете его в эти предустановленные методы.

ОПРЕДЕЛЕНИЕ  Кадром (frame) называется один прогон зацикленного игрового кода. Практически все видеоигры (не только в Unity, но и вообще) строятся вокруг основного игрового цикла. То есть код циклически выполняется все время, пока запущена игра. Каждый цикл включает в себя прорисовку экрана, откуда, собственно, и возник термин «кадр» (по аналогии с набором статичных кадров в фильме).

Листинг 1.1. Шаблон кода для базового компонента сценария

using UnityEngine;

¬ Добавляем пространства имен для классов Unity и Mono.

using System.Collections;

 

public

class HelloWorld : MonoBehaviour { ¬ Синтаксис для задания наследования.

void

Start() {

 

//

выполняем некую однократную операцию ¬ Помещаем сюда однократно выполняемый код.

}

 

 

34      Глава 1. Знакомство с Unity

void Update() {

// выполняем некую операцию в каждом кадре ¬ Помещаем сюда код, запускаемый в каждом кадре.

}

}

Именно так выглядит файл, когда вы создаете новый сценарий на C#: минимальный шаблонный код, определяющий корректный компонент в Unity. Существует шаблон сценария, скрытый в недрах Unity. При создании нового сценария приложение копирует этот шаблон и переименовывает класс в соответствии с именем файла (в моем случае — в HelloWorld.cs). Есть и пустые оболочки методов Start() и Update(), так как именно из них чаще всего вызывается создаваемый код (хотя я обычно добавляю к этим функциям немного пробелов, так как количество пробелов в этом шаблоне отличается от того, что я предпочитаю).

Чтобы создать сценарий, выберите команду C# Script в меню Create, доступ к которому можно получить, открыв меню Assets (обратите внимание, что как в меню Assets, так и в меню GameObjects есть варианты команды Create, но это разные команды) или щелкнув правой кнопкой мыши в произвольной точке вкладки Project. Введите имя нового сценария, например «HelloWorld». Как вы увидите чуть позже (рис. 1.15), этот файл сценария можно мышью перетащить на произвольный объект сцены. Дважды щелкните на значке сценария, и он автоматически откроется в программе MonoDevelop, о которой мы поговорим далее.

1.3.2. Программа MonoDevelop — межплатформенная среда разработки

Программирование осуществляется не внутри Unity, код существует в виде отдельных файлов, местоположение которых вы сообщаете Unity. Файлы сценариев могут создаваться в приложении Unity, но в любом случае вам потребуется текстовый редактор или IDE, где будет писаться код для этих изначально пустых файлов. В комплекте с Unity поставляется приложение MonoDevelop как межплатформенная интегрированная среда разработки (IDE) для языка C# с открытым исходным кодом (его внешний вид демонстрирует рис. 1.14). Более подробную информацию об этой программе можно получить на странице www.monodevelop.com, но при этом вы должны пользоваться версией, идущей в комплекте с Unity, а не скачанным с этого сайта приложением, так как в базовую программу был внесен ряд изменений для лучшей интеграции с Unity.

ПРИМЕЧАНИЕ  Программа MonoDevelop объединяет файлы в группы, называемые решениями (solution). Инструмент Unity генерирует содержащее все файлы сценариев решение автоматически, поэтому, как правило, вы можете вообще об этом не думать.

Так как язык C# изначально разрабатывался в Microsoft, вероятно, вам было бы интересно узнать, можно ли для программирования в Unity пользоваться Visual Studio. Да, можно. Инструментальные средства поддержки доступны по адресу www.unityvs.com, но лично я предпочитаю программу MonoDevelop, главным образом потому, что Visual Studio работает только в операционных системах семейства Windows, что ограничивает ваши возможности. Я не считаю, что это плохо, и, если вы уже привыкли программировать в Visual Studio, продолжайте пользоваться этой средой разработки. Вы легко

1.3. Готовимся программировать в Unity      35

Н а Run а•• MonoDevelop;

Фа а а‰ ‚ а а€аŠ

а • а. Д • а €•

€‚ ƒа а €а ƒ Play Unity

а

 

Па Solution

а а а

а

Па Document Outline

• “а ‰ •

а . В

• ‰ View •а€ Pads

™ • ‚

а а Document Outline, а ƒа • а› а а € а• •

Рис. 1.14. Фрагменты интерфейса программы MonoDevelop

сможете выполнять все практические задания из книги (и после вводной главы больше о IDE мы говорить не будем). Однако привязка рабочего процесса к Windows аннулирует одно из самых важных преимуществ Unity. Трудности возникнут, если вам потребуется сотрудничать с разработчиками, использующими компьютеры Mac, или если вы захотите выполнить развертывание своей игры на платформе iOS. Хотя язык C# является продукцией Microsoft и поэтому изначально работал только в Windows на платформе .NET Framework, в настоящее время он стал открытым стандартом языка, к тому же появился важный межплатформенный фреймворк Mono. Unity использует Mono как основу для программирования, и именно среда MonoDevelop обеспечивает межплатформенные возможности всего процесса разработки.

Все время помните, что в программе MonoDevelop код только пишется, но не запускается. Эта среда разработки всего лишь хорошо оснащенный текстовый редактор, а воспроизводить код следует щелчком на кнопке Play в программе Unity.

1.3.3. Вывод на консоль: «Hello World!»

Итак, в нашем проекте появился пустой сценарий, но пока отсутствует объект, к которому этот сценарий можно было бы присоединить. Вспомните рис. 1.1, демонстрирующий работу системы компонентов; любой сценарий является компонентом, поэтому его нужно превратить в один из компонентов какого-то объекта.

Выберите в меню Select GameObject команду Create Empty, и на вкладке Hierarchy появится пустой объект GameObject. Теперь перетащите значок сценария с вкладки Project на вкладку Hierarchy и поместите на строку GameObject. Как показано на рис. 1.15, приложение Unity выделяет места, куда можно поместить сценарий. Как только вы отпустите кнопку мыши, сценарий будет присоединен к объекту GameObject. Чтобы удостовериться в успешном исходе операции, выделите объект и посмотрите на панель Inspector. Вы должны увидеть там два компонента: Transform — базовый компонент

36      Глава 1. Знакомство с Unity

положения/ориентации/масштаба, присутствующий у всех объектов, который невозможно удалить, а сразу под ним — ваш сценарий.

П а а

а Project

а а Hierarchy

а •• GameObject

Рис. 1.15. Связывание сценария с объектом GameObject

ПРИМЕЧАНИЕ  В конце концов, это действие — перетаскивание объектов и укладывание их на другие объекты — станет вам привычным. Этим способом в Unity создается огромное количество различных связей, а не только привязка сценариев к объектам.

После связывания сценария с объектом на панели Inspector вы увидите примерно такую картину, которая показана на рис. 1.16. Сценарий будет фигурировать в качестве компонента. Теперь он начнет исполняться при воспроизведении сцены, хотя вы не заметите никаких внешних проявлений, так как код еще не написан. Именно этим мы сейчас займемся!

Откройте сценарий в программе Mono­

Develop, чтобы вернуться к листингу 1.1. Рис. 1.16. Связанный сценарий отображается Классическим примером, с которого всег-

на панели Inspector

да начинается знакомство с новой средой программирования, становится вывод текста «Hello World!». Поэтому добавьте эту строку в метод Start(), как показано в листинге 1.2.

Листинг 1.2. Добавляем вывод сообщения на консоль

void Start() {

Debug.Log("Hello World!"); ¬ Добавляем сюда команду регистрации.

}