Асинхронное программирование unity

  • 23 минуты на чтение


Август 2014 года

Том 29 Номер 8

Адам Тюльпан

Как архитектор программного обеспечения, я написал много систем. Реверсивно спроектированных вредоносных программ машинного кода. И в целом мог бы понять вещи на стороне кода. Когда дело дошло до создания игр, я немного растерялся, не зная, с чего начать.

Я занимался графическим программированием нативного кода в первые дни Windows. И это не было весело. Затем я начал разработку DirectX, но понял, что. Хотя он был чрезвычайно мощным, казалось. Что слишком много кода для того. Что я хотел сделать.

Затем, однажды, я решил поэкспериментировать с Unity, и я увидел. Что это может сделать некоторые удивительные вещи. Это первая статья из серии из четырех частей. Посвященная основам и архитектуре Unity. Я покажу, как создавать 2D и 3D игры и, наконец. Как строить для платформ Windows.

Что Такое Единство

Unity-это 2D/3D движок и фреймворк, который дает вам систему для проектирования игровых или прикладных сцен для 2D, 2.5 D и 3D. Я говорю игры и приложения. Потому что я видел не только игры. Но и обучающие симуляторы. Приложения первого ответа и другие бизнес-ориентированные приложения. Разработанные с Unity. Которые должны взаимодействовать с 2D/3D пространством. Unity позволяет взаимодействовать с ними не только с помощью кода. Но и визуальных компонентов. А также экспортировать их на любую крупную мобильную платформу и многое другое—бесплатно. (Есть также pro-версия. Которая очень хороша. Но она не бесплатна. Вы можете сделать впечатляющую сумму с бесплатной версией.) Unity поддерживает все основные 3D-приложения и многие аудиоформаты и даже понимает формат Photoshop .psd. Поэтому вы можете просто поместить файл .psd в проект Unity. Unity позволяет импортировать и собирать ресурсы. Писать код для взаимодействия с объектами. Создавать или импортировать анимации для использования с продвинутой системой анимации и многое другое.

Как видно из рисунка 1, Unity проделала работу по обеспечению кросс-платформенной поддержки. И вы можете менять платформы буквально одним щелчком мыши, хотя. Честно говоря. Обычно требуются минимальные усилия. Такие как интеграция с каждым магазином для покупок в приложении.

Платформы, поддерживаемые Unity
Рис. 1 Платформы, поддерживаемые Unity

Возможно, самой мощной частью Unity является Unity Asset Store, возможно. Лучший рынок активов на игровом рынке. В нем вы можете найти все ваши потребности в игровых компонентах. Такие как иллюстрации, 3D-модели. Анимационные файлы для ваших 3D—моделей (см. контент Mixamo в магазине для более чем 10 000 движений). Звуковые эффекты и полные треки. Плагины—в том числе такие. Как мультиплатформенный инструментарий. Который может помочь с поддержкой нескольких платформ. — визуальные скриптовые системы. Такие как PlayMaker и Behavior. Продвинутые шейдеры, текстуры. Эффекты частиц и многое другое. Интерфейс Unity полностью совместим с сценариями. Позволяя многим сторонним плагинам интегрироваться прямо в графический интерфейс Unity. Большинство, если не все. Профессиональные разработчики игр используют ряд пакетов из магазина активов. И если у вас есть что-то достойное. Вы можете опубликовать это и там.

А Чем Не Является Единство

Я не решаюсь описать что-либо, что не является Единством. Поскольку люди постоянно бросают ему вызов. Однако Unity по умолчанию не является системой. В которой можно создавать 2D-активы и 3D-модели (за исключением ландшафтов). Вы можете привести кучу зомби в сцену и управлять ими. Но вы не будете создавать зомби в инструменте Unity по умолчанию. В этом смысле Unity не является инструментом создания активов. Как Autodesk Maya или 3DSMax. Blender или даже Adobe Photoshop. Однако есть по крайней мере один сторонний модуль моделирования (ProBuilder). Который позволяет моделировать 3D-компоненты прямо внутри Unity; существуют плагины 2D world builder. Такие как 2D Terrain Editor для создания 2D плиточных сред. И вы также можете создавать ландшафты из Unity. Используя их инструменты Terrain для создания удивительных ландшафтов с деревьями, травой. Горами и многим другим. Поэтому, опять же, я не решаюсь предложить какие-либо ограничения на то. Что может сделать Unity.

Как Microsoft вписывается в это? Microsoft и Unity тесно сотрудничают. Чтобы обеспечить отличную поддержку платформы во всем стеке Microsoft. Unity поддерживает автономные исполняемые файлы Windows, Windows Phone. Приложения Windows Store. Xbox 360 и Xbox One.

Приступая к работе

Скачайте последнюю версию Unity и получите себе двухкнопочную мышь с кликабельным колесиком прокрутки. Существует одна загрузка. Которая может быть лицензирована для бесплатного режима или pro. Вы можете увидеть различия между версиями по адресу unity3d.com/unity/licenses. Редактор, являющийся основным интерфейсом Unity. Работает на Windows (включая Surface Pro). Linux и OS X.

В следующей статье я расскажу о реальной разработке игр с Unity. Но сначала я изучу интерфейс Unity. Структуру и архитектуру проекта.

Архитектура и компиляция

Unity-это собственный игровой движок на основе C++. Вы пишете код на C#, JavaScript (UnityScript) или, реже, Boo. Ваш код, а не код Unity engine, работает на Mono или Microsoft .NET Framework, который компилируется Just-in-Time (JIT) (за исключением iOS. Которая не допускает JIT-код и компилируется Mono в машинный код с использованием компиляции Ahead-of-Time [AOT]).

Unity позволяет тестировать игру в IDE без необходимости выполнять какой-либо экспорт или сборку. Когда вы запускаете код в Unity, вы используете Mono версии 3.5, которая имеет совместимость API примерно на одном уровне с .NET Framework 3.5/CLR 2.0.

Вы редактируете свой код в Unity. Дважды щелкнув файл кода в представлении проекта. Который открывает кросс-платформенный редактор по умолчанию MonoDevelop. Если вы предпочитаете, вы можете настроить Visual Studio в качестве редактора.

Вы отлаживаете с помощью MonoDevelop или используете сторонний плагин для Visual Studio UnityVS. Вы не можете использовать Visual Studio в качестве отладчика без UnityVS. Потому что когда вы отлаживаете свою игру. Вы не отлаживаете ее Unity.exe. Вы отлаживаете виртуальную среду внутри Unity. Используя мягкий отладчик. Который выдает команды и выполняет действия.

Для отладки вы запускаете MonoDevelop из Unity. MonoDevelop имеет плагин. Который открывает соединение обратно к отладчику Unity и выдает ему команды после отладки | присоединения к процессу в MonoDevelop. С помощью UnityVS вы подключаете отладчик Visual Studio обратно к Unity.

Когда вы открываете Unity в первый раз, вы видите диалоговое окно проекта. Показанное на рис. 2.

Мастер проекта Unity
Рис. 2. Мастер проекта Unity

В диалоговом окне проект вы указываете имя и местоположение вашего проекта (1). Вы можете импортировать любые пакеты в свой проект (2). Хотя вам не нужно ничего отмечать здесь; список предоставляется только для удобства. Вы также можете импортировать пакет позже. Пакет—это файл .unitypackage, который содержит предварительно упакованные ресурсы-модели, код, сцены. Плагины—все. Что вы можете упаковать в Unity. И вы можете легко использовать или распространять их. Однако не отмечайте здесь что-то, если вы не знаете. Что это такое; размер вашего проекта будет расти. Иногда значительно. Наконец, вы можете выбрать либо 2D, либо 3D (3). Этот выпадающий список является относительно новым для Unity. Который до недавнего времени не имел значительных инструментов 2D-игры. Когда установлено значение 3D. По умолчанию используется 3D—проект-типичное поведение Unity. Как это было в течение многих лет. Поэтому он не нуждается в особом упоминании. Когда 2D выбирается, Unity меняет несколько, казалось бы, небольших. Но важных вещей. О которых я расскажу в статье 2D позже в этой серии.

Этот список заполняется из файлов .unitypackage в определенных местах вашей системы; Unity предоставляет несколько вариантов установки. Таким образом, он будет отображаться в этом списке. Как только он появится в вашей системе. Вы можете просто дважды щелкнуть по любому файлу .unitypackage. И он будет импортирован в ваш проект.

Продолжая работу с интерфейсом Unity, я перейду от нажатия кнопки Создать в диалоговом окне на рис. 2, чтобы создать новый проект. Макет окна Unity по умолчанию показан на рисунке 3.

Окно Unity по умолчанию
Рисунок 3 Окно Unity По Умолчанию

Вот что вы увидите:

  1. Проект: Все файлы в вашем проекте. Вы можете перетащить из проводника в Unity, чтобы добавить файлы в свой проект.
  2. Сцена: Текущая открытая сцена.
  3. Иерархия: Все игровые объекты в сцене. Обратите внимание на использование термина GameObjects и раскрывающегося меню GameObjects.
  4. Инспектор: Компоненты (свойства) выбранного объекта в сцене.
  5. Панель инструментов: Крайний левый угол-Панорамирование, Перемещение, Поворот, масштабирование. А в центре-Воспроизведение, Пауза. Предварительный кадр. Нажатие кнопки Play воспроизводит игру почти мгновенно. Без необходимости выполнять отдельные сборки. Pause приостанавливает игру. А advance frame запускает ее по одному кадру за раз. Что дает вам очень жесткий контроль отладки.
  6. Консоль: Это окно может стать несколько скрытым. Но оно показывает выходные данные вашей компиляции, ошибки. Предупреждения и так далее. Он также показывает отладочные сообщения из кода; например, Debug.Журнал покажет здесь свой вывод.

Важно отметить, что вкладка Игра рядом с вкладкой Сцена. Эта вкладка активируется, когда вы нажимаете кнопку play. И ваша игра начинает запускаться в этом окне. Это называется режимом игры. И он дает вам площадку для тестирования вашей игры и даже позволяет вносить живые изменения в игру. Переключаясь обратно на вкладку Сцены. Но здесь будьте очень осторожны. Пока кнопка воспроизведения подсвечена, вы находитесь в режиме воспроизведения. И когда вы оставите ее. Все изменения. Сделанные вами в режиме воспроизведения. Будут потеряны. Я, как и почти каждый разработчик Unity, с которым я когда-либо разговаривал. Потерял работу таким образом. Поэтому я меняю цвет своего редактора. Чтобы сделать его очевидным. Когда я нахожусь в режиме воспроизведения через Edit | Preferences | Colors | Playmode tint.

О Сценах

Все, что работает в вашей игре, существует в сцене. Когда вы упаковываете игру для платформы. Полученная игра представляет собой набор из одной или нескольких сцен. А также любого добавляемого вами кода. Зависящего от платформы. Вы можете иметь столько сцен, сколько хотите в проекте. Сцена может рассматриваться как уровень в игре. Хотя вы можете иметь несколько уровней в одном файле сцены. Просто перемещая игрока/камеру в разные точки сцены. Когда вы загружаете сторонние пакеты или даже образцы игр из хранилища ресурсов. Вы обычно должны искать файлы сцен в своем проекте. Чтобы открыть их. Файл сцены-это один файл, который содержит все виды метаданных о ресурсах. Используемых в проекте для текущей сцены и ее свойств. Важно часто сохранять сцену, нажимая Ctrl+S во время разработки. Как и с любым другим инструментом.

Обычно Unity открывает последнюю сцену, над которой вы работали, хотя иногда. Когда Unity открывает проект. Он создает новую пустую сцену. И вам нужно найти эту сцену в своем обозревателе проектов. Это может быть довольно запутанным для новых пользователей, но важно помнить. Если вам случилось открыть свой последний проект и задаться вопросом. Куда делась вся ваша работа! Расслабьтесь, вы найдете эту работу в файле сцены. Который сохранили в своем проекте. Вы можете выполнить поиск всех сцен в вашем проекте, щелкнув значок, указанный на рис. 4, и выполнив фильтрацию по Сцене.

Фильтрация сцен в проекте
Рис. 4 Фильтрация сцен в проекте

В сцене вы ничего не видите без камеры и ничего не слышите без компонента аудиослушателя. Подключенного к какому-то игровому объекту. Заметьте, однако, что в любой новой сцене Unity всегда создает камеру. На которой уже установлен компонент прослушивателя звука.

Структура проекта и Импорт активов

Проекты Unity не похожи на проекты Visual Studio. Вы не открываете файл проекта или даже файл решения. Потому что он не существует. Вы указываете Unity на структуру папок, и она открывает папку как проект. Проекты содержат папки Assets, Library, ProjectSettings и Temp. Но в интерфейсе отображается только папка Assets. Которую можно увидеть на рис. 4.

Папка Assets содержит все ваши активы—искусство, код, аудио; каждый файл, который вы вносите в свой проект, идет сюда. Это всегда папка верхнего уровня в редакторе Unity. Но вносите изменения только в интерфейс Unity. А не через файловую систему.

Папка библиотеки является локальным кэшем для импортированных ресурсов; она содержит все метаданные для ресурсов. В папке ProjectSettings хранятся параметры. Которые вы настраиваете с помощью параметров Edit | Project. Временная папка используется для временных файлов из Mono и Unity в процессе сборки.

Я хочу подчеркнуть важность внесения изменений только через интерфейс Unity. А не непосредственно в файловую систему. Это включает в себя даже простое копирование и вставку. Unity отслеживает метаданные для ваших объектов через редактор. Поэтому используйте редактор для внесения изменений (за исключением нескольких крайних случаев). Однако вы можете перетащить его из своей файловой системы в Unity; это работает просто отлично.

Важнейший игровой объект

Практически все в вашей сцене является игровым объектом. Подумайте о Системе.Объект в .NET Framework. Почти все типы происходят от него. То же самое относится и к GameObject. Это базовый класс для всех объектов в вашей сцене Unity. Все объекты, показанные на рис. 5 (и многие другие). Являются производными от GameObject.

GameObjects в Unity
Рисунок 5 Игровые объекты в Unity

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

Простой игровой объект
Рисунок 6 Простой игровой объект

У GameObject есть имя, тег (похожий на текстовый тег. Который вы бы назначили через FrameworkElement.Тег в XAML или тег в Windows Forms), слой и Преобразование (вероятно. Самое важное свойство из всех).

Свойство Transform — это просто положение. Поворот и масштаб любого игрового объекта. Unity использует левую систему координат. В которой вы представляете координаты экрана вашего компьютера как X (горизонтальные). Y (вертикальные) и Z (глубина. То есть вход или выход из экрана).

В разработке игр довольно часто используются векторы. О которых я расскажу немного подробнее в будущих статьях. На данный момент достаточно знать, что Transform.Position и Transform.Scale являются объектами Vector3. Vector3-это просто трехмерный вектор; другими словами. Это не более чем три точки—просто X. Y и Z. С помощью этих трех простых значений вы можете установить местоположение объекта и даже переместить объект в направлении вектора.

Компоненты

Вы добавляете функциональность в GameObjects, добавляя компоненты. Все, что вы добавляете, является компонентом. И все они отображаются в окне инспектора. Существуют компоненты MeshRender и SpriteRender; Компоненты для работы аудио и камеры; компоненты. Связанные с физикой (коллайдеры и жесткие тела). Системы частиц. Системы поиска путей. Сторонние пользовательские компоненты и многое другое. Вы используете компонент сценария для назначения кода объекту. Компоненты-это то, что оживляет ваши игровые объекты, добавляя функциональность. Сродни шаблону декоратора в разработке программного обеспечения. Только намного круче.

Я назначу некоторый код новому GameObject, в данном случае простому кубу. Который вы можете создать через GameObject | Create Other | Cube. Я переименовал куб Врага, а затем создал еще один, чтобы иметь два куба. Вы можете видеть на рисунке 7, что я переместил один куб примерно на -15 единиц от другого. Что вы можете сделать с помощью инструмента перемещения на панели инструментов или клавиши W. Как только объект будет выделен.

Текущий проект с двумя кубами
Рисунок 7 Текущий проект с двумя кубами

Код — это простой класс. Который находит игрока и перемещает к нему своего владельца. Обычно вы выполняете операции перемещения с помощью одного из двух подходов: либо вы перемещаете объект в новое положение каждый кадр. Изменяя его свойства Transform.Position, либо вы применяете к нему физическую силу и позволяете Unity позаботиться обо всем остальном.

Выполнение действий в каждом кадре предполагает несколько иной способ мышления. Нежели указание: “двигайтесь к этой точке.” В этом примере я собираюсь немного перемещать объект каждый кадр. Чтобы иметь точный контроль над тем. Куда он движется. Если вы предпочитаете не настраивать каждый кадр. Существуют библиотеки для выполнения движений с одним вызовом функции. Такие как свободно доступная библиотека iTween.

Первое, что я делаю,-это щелкаю правой кнопкой мыши в окне проекта. Чтобы создать новый скрипт C# под названием EnemyAI. Чтобы назначить этот сценарий объекту. Я просто перетаскиваю файл сценария из представления проекта на объект в представлении сцены или Иерархии. И код присваивается объекту. Единство заботится обо всем остальном. Это так просто.

На рис. 8 показан вражеский куб с назначенным ему сценарием.

Враг с назначенным ему сценарием
Рисунок 8 Враг с Назначенным Ему Сценарием

Взгляните на код на рис. 9 и обратите внимание на открытую переменную. Если вы посмотрите в редакторе, вы увидите. Что моя публичная переменная появляется с возможностью переопределения значений по умолчанию во время выполнения. Это довольно круто. Вы можете изменить значения по умолчанию в графическом интерфейсе для примитивных типов. А также предоставить открытые переменные (но не свойства) многих различных типов объектов. Если я перетащу этот код на другой GameObject. Будет создан совершенно отдельный экземпляр этого компонента кода. Это базовый пример, и его можно сделать более эффективным, скажем. Добавив компонент RigidBody к этому объекту. Но я буду держать его здесь простым.

Рисунок 9 Сценарий EnemyAI

public class EnemyAI : MonoBehavior {   // These values will appear in the editor. Full properties will not.   public float Speed = 50;   private Transform _playerTransform;   private Transform _ myTransform;   // Called on startup of the GameObject it's assigned to.   void Start()   {     // Find some gameobject that has the text tag "Player" assigned to it.     // This is startup code. Shouldn't query the player object every     // frame. Store a ref to it.     var player = GameObject.FindGameObjectWithTag("Player");     if (!player)     {       Debug.LogError(         "Could not find the main player. Ensure it has the player tag set.");     }     else     {       // Grab a reference to its transform for use later (saves on managed       // code to native code calls).       _playerTransform = player.transform;     }     // Grab a reference to our transform for use later.     _myTransform = this.transform;   }   // Called every frame. The frame rate varies every second.   void Update()   {     // I am setting how fast I should move toward the "player"     // per second. In Unity, one unit is a meter.     // Time.deltaTime gives the amount of time since the last frame.     // If you're running 60 FPS (frames per second) this is 1/60 = 0.0167,     // so w/Speed=2 and frame rate of 60 FPS (frame rate always varies      // per second). I have a movement amount of 2*0.0167 = .033 units     // per frame. This is 2 units.     var moveAmount = Speed * Time.deltaTime;     // Update the position. Move toward the player's position by moveAmount.     _myTransform.position = Vector3.MoveTowards(_myTransform.position,       _playerTransform.position. MoveAmount);   } } 

В коде я могу получить ссылку на любой компонент. Открытый в редакторе. Я также могу назначить скрипты GameObject. Каждый со своими собственными методами запуска и обновления (и многими другими методами). Предполагая, что компонент скрипта, содержащий этот код. Нуждается в ссылке на класс EnemyAI (компонент). Я могу просто попросить этот компонент:

После того как вы отредактируете код в MonoDevelop или выбранном вами редакторе кода. А затем снова переключитесь на Unity. Вы обычно заметите небольшую задержку. Это происходит потому, что Unity-это фоновая компиляция вашего кода. Вы можете изменить свой редактор кода (не отладчик) с помощью Edit | Preferences | External Tools | External Script Editor. Любые проблемы с компиляцией будут отображаться в самой нижней строке состояния экрана редактора Unity. Так что следите за ними. Если вы попытаетесь запустить свою игру с ошибками в коде. Unity не позволит вам продолжать.

Написание Кода

В предыдущем примере кода есть два метода, Start и Update. И класс EnemyHealth наследует от базового класса MonoBehavior. Который позволяет просто назначить этот класс GameObject. В этом базовом классе вы будете использовать много функций и, как правило. Несколько методов и свойств. Основные методы-это те, которые Unity вызовет. Если они существуют в вашем классе. Есть несколько методов, которые могут быть вызваны (см. bit.ly/1jeA3UM). Хотя есть много методов, так же как и с ASP.NET Жизненный цикл страницы веб-форм обычно используется всего несколько. Вот наиболее распространенные методы кода для реализации в ваших классах. Которые относятся к последовательности событий для классов. Производных от MonoBehavior:

Пробуждение: Этот метод вызывается один раз на объект при первой инициализации объекта. Другие компоненты могут еще не быть инициализированы. Поэтому этот метод обычно используется для инициализации текущего GameObject. Вы всегда должны использовать этот метод для инициализации класса. Производного от MonoBehavior. А не конструктора. И не пытайтесь запрашивать другие объекты в вашей сцене здесь. Так как они могут еще не быть инициализированы.

Start: Этот метод вызывается в течение первого кадра времени жизни объекта. Но перед любыми методами обновления. Это может показаться очень похожим на Awake, но с Start вы знаете. Что другие объекты были инициализированы через Awake и существуют в вашей сцене. И поэтому вы можете легко запрашивать другие объекты в коде, например:

Обновление: Этот метод называется каждый кадр. Как часто это бывает, спросите вы? Ну, это бывает по-разному. Это полностью зависит от вычислений. Поскольку ваша система всегда меняет свою нагрузку, когда она делает разные вещи. Эта частота кадров меняется каждую секунду. Вы можете нажать кнопку Статистика на вкладке Игра. Когда вы переходите в режим воспроизведения. Чтобы увидеть текущую частоту кадров. Как показано на рисунке 10.

Получение статистики
Рисунок 10 Получение статистики

FixedUpdate: Этот метод вызывается фиксированное количество раз в секунду. Независимо от частоты кадров. Поскольку Обновление вызывается различное количество раз в секунду и не синхронизировано с физическим движком. Обычно лучше всего использовать FixedUpdate. Когда вы хотите предоставить силу или некоторые другие связанные с физикой функции объекту. FixedUpdate по умолчанию называется каждые 0,02 секунды, что означает. Что Unity также выполняет физические вычисления каждые 0,02 секунды (этот интервал называется фиксированным шагом времени и регулируется разработчиком). Который, опять же. Не зависит от частоты кадров.

Проекты кода, генерируемые Unity

Как только у вас есть код в вашем проекте. Unity создает один или несколько файлов проекта в вашей корневой папке (которая не видна в интерфейсе Unity). Это не двоичные файлы Unity engine, а проекты для Visual Studio или MonoDevelop. В которых вы будете редактировать и компилировать свой код. Unity может создавать то, что может показаться большим количеством отдельных проектов, как показано на рисунке 11, хотя каждый из них имеет важную цель.

Проекты, Созданные Unity
Рисунок 11 Проекты, Созданные Unity

Если у вас есть простой проект Unity, вы не увидите все эти файлы. Они создаются только тогда. Когда у вас есть код. Помещенный в различные специальные папки. Проекты, показанные на рис. 11, разбиты только на три типа:

  • Сборка-CSharp.csproj
  • Сборка-CSharp-Editor.csproj
  • Сборка-CSharp-firstpass.csproj

Для каждого из этих проектов существует дубликат проекта. Созданного с добавлением к нему-vs. Например Assembly-CSharp-vs. csproj. Эти проекты используются, если Visual Studio является вашим редактором кода. И они могут быть добавлены в ваш экспортированный проект из Unity для специфичной для платформы отладки в вашем решении Visual Studio.

Другие проекты служат той же цели, но CSharp заменен UnityScript. Это просто версии проектов на JavaScript (UnityScript). Которые будут существовать только в том случае. Если вы используете JavaScript в своей игре Unity и только если у вас есть скрипты в папках. Которые запускают создание этих проектов.

Теперь, когда вы увидели, какие проекты создаются, я изучу папки. Которые запускают эти проекты. И покажу вам. Каковы их цели. Каждый путь к папке предполагает. Что он находится под корневой папкой /Assets в представлении проекта. Активы всегда являются корневой папкой и содержат все ваши файлы активов под ней. Например, Стандартные активы-это фактически /Активы/Стандартные активы. Процесс сборки скриптов проходит четыре этапа для создания сборок. Объекты, скомпилированные в фазе 1, не могут видеть объекты в фазе 2, потому что они еще не были скомпилированы. Это важно знать, когда вы смешиваете UnityScript и C# в одном проекте. Если вы хотите ссылаться на класс C# из UnityScript, вам нужно убедиться. Что он компилируется на более ранней стадии.

Фаза 1 состоит из сценариев выполнения в стандартных активах. Стандартных активах Pro и папках подключаемых модулей. Расположенных в папке/Assets. На этом этапе создается проект Assembly-CSharp-firstpass.csproj.

Сценарии фазы 2 находятся в папках Standard Assets/Editor. Pro Standard Assets/Editor и Plug-ins/Editor. Последняя папка предназначена для скриптов. Которые взаимодействуют с API редактора Unity для функциональности во время разработки (подумайте о плагине Visual Studio и о том. Как он улучшает графический интерфейс. Только он работает в редакторе Unity). На этом этапе создается проект Assembly-CSharp-Editor-firstpass.csproj.

Фаза 3 включает в себя все остальные сценарии. Которые не находятся в папке редактора. На этом этапе создается проект Assembly-CSharp-Editor.csproj.

Фаза 4 состоит из всех оставшихся скриптов (тех. Что находятся в любой другой папке. Называемой Редактором. Например /Assets/Editor или /Assets/Foo/Editor). На этом этапе создается проект Assembly-CSharp.csproj.

Есть еще пара менее используемых папок, которые здесь не рассматриваются. Например Ресурсы. И есть нерешенный вопрос о том, что использует компилятор. Это .NET? Это Моно? Это .NET для среды выполнения Windows (WinRT)? Это .NET для Windows Phone Runtime? На рис. 12 перечислены значения по умолчанию, используемые для компиляции. Это важно знать, особенно для приложений на базе WinRT, поскольку API. Доступные для каждой платформы. Различаются.

Рис. 12 Варианты компиляции

При выполнении сборки для Windows Unity отвечает за выполнение вызовов для создания библиотек игр из кода C#/UnityScript/Boo (DLL) и включения собственных библиотек среды выполнения. Для магазина Windows и Windows Phone 8 он экспортирует решение Visual Studio. За исключением Windows standalone. В котором Unity генерирует файлы .exe и необходимые .dll. Я расскажу о различных типах сборки в заключительной статье серии. Когда буду описывать построение платформы. Визуализация графики на низком уровне выполняется на платформах Windows с помощью DirectX.

Разработка игры в Unity довольно простой процесс:

  • Принесите свои активы (художественные работы, аудио и так далее). Используйте хранилище активов. Напиши свою. Наймите художника. Обратите внимание, что Unity имеет встроенную поддержку Maya, Cheetah3d. Blender и 3dsMax. Что в некоторых случаях требует установки программного обеспечения для работы с этими собственными 3D-форматами. А также работает с распространенными форматами файлов .obj и .fbx.
  • Напишите код на C#, JavaScript/UnityScript или Boo. Чтобы управлять вашими объектами. Сценами и реализовывать игровую логику.
  • Тест в Единстве. Экспорт на платформу.
  • Тест на этой платформе. Развертывать.

Но Подождите, Я Хочу Еще!

Эта статья служит обзором архитектуры и процесса в Unity. Я рассказал об интерфейсе, основах назначения кода, GameObjects. Компонентах, Mono и .NET, а также о многом другом. Это прекрасно настраивает нас на следующую статью. Где я сразу же погружусь в сборку игровых компонентов для 2D-игры. Следите за Microsoft Virtual Academy. Так как я буду проводить двухдневное мероприятие Unity learning в конце лета. И следите за местными региональными учебными мероприятиями по адресу unity3d.com/pages/windows/events.


Адам Тюльпан -старший технический евангелист Microsoft. Живущий в солнечной Южной Калифорнии. Он инди-разработчик игр. Соадминистратор Unity Meetup округа Ориндж и один из основателей Unity Meetup. pluralsight.com автор. У них с женой вот-вот родится третий ребенок, так что обратитесь к нему. Пока у него еще есть свободная минутка. adamt@microsoft.com или в Твиттере по адресу twitter.com/AdamTuliper...

Спасибо следующим техническим экспертам за рецензирование этой статьи: Мэтту Ньюману (Subscience Studios). Хайме Родригесу (Microsoft) и Таутвидасу Жилису (Unity)