Программирование

Программирование игры с помощью Unity: руководство для начинающих

Программирование игры с Unity: руководство для начинающих

Удивительной особенностью интернет-экономики является рост числа независимых видеоигр. Когда-то это был эксклюзивный домен тысяч триллионов студий с многомиллионным бюджетом, был разработан ряд наборов инструментов, которые предоставляют современные ресурсы для разработки игр отдельным людям или небольшим специальным коллекциям программистов и дизайнеров. Ранее мы уже обсуждали лучшие инди-игры , поэтому обязательно ознакомьтесь с ними, чтобы узнать, чего можно достичь с помощью таких инструментов, как Unity.

Это руководство доступно для скачивания в формате PDF. Загрузите Программирование Игры с Unity: Руководство для начинающих сейчас . Не стесняйтесь копировать и делиться этим со своими друзьями и семьей.

Эти инди-команды разработчиков игр продемонстрировали гибкость и толерантность к риску, что во многих случаях позволяет им продвигать инновации в игровом процессе быстрее, чем их большие бюджетные аналоги. За последние годы были выпущены несколько потрясающе успешных инди-игр, в том числе Minecraft , Limbo и Super Meat Boy , и даже если вам не нужны навыки, чтобы создавать подобные игры, вы можете создать игру, используя Buildbox

В стремительно развивающейся среде разработки инди-игр Unity стала стандартом де-факто: его низкая стоимость, простота использования и широкий набор функций делают его идеальным для быстрой разработки игр. Unity настолько гибок, что вы даже можете создавать свои собственные игровые контроллеры создать собственный игровой с небольшим количеством DIY ноу-хау!

Даже крупные студии, такие как CCP (разработчики Eve Online ), используют его для быстрого прототипирования игровых концепций. Unity предоставляет «игровой движок в коробке» — движок физики и рендеринга с хуками для нескольких языков сценариев, адаптируемый практически к любому жанру видеоигр.

В то время как Unity предоставляет визуальный редактор для управления игровой средой, Unity не является инструментом для создания игр с «нулевым программированием». Это требует, чтобы вы программировали для получения результатов, но также дает вам гораздо более гибкий и мощный инструмент, чем любая программа для разработчиков игр.

Unity не сделает эту работу за вас, но она существенно снизит барьер для входа. Начиная с нуля с C ++ и OpenGL, может потребоваться несколько дней, чтобы добраться до точки, где на самом деле что-то отображается на экране. Использование Unity занимает около десяти секунд. Unity быстро и интуитивно передает основные элементы создания игр начинающим программистам.

Сегодня я проведу вас через все, что вам нужно знать, чтобы создать игру в Unity, которая разбита на десять основных глав:

§1 – Версии единства

§2 – Установка Unity

§3 — краткое введение в объектно-ориентированную парадигму

§4 – Основы единства

§5 – Пример: основные элементы игры

§6 – Сценарии в Unity

§7 – Пример: сценарий понг

§8 — Изучение документации / обучение

§9 — Сборка вашей игры / Компиляция в отдельное приложение

§10-Заключительные заметки

1. Версии единства

Unity поставляется в двух основных вариантах: профессиональная версия и бесплатная версия. Есть ряд отличий , но, в общем, профессиональная версия поддерживает ряд визуальных улучшений (таких как мягкие тени в реальном времени и постобработка), а также большое количество относительно незначительных функций, которые чрезвычайно полезны для более сложных игр. ,

Тем не менее, для большинства относительно простых игр, которые вы, возможно, захотите собрать, бесплатная версия Unity вполне подходит. Ниже мы рассмотрим основные различия ниже для тех, кто заинтересован.

1.1 Ценообразование

Бесплатная версия Unity, конечно, бесплатна. Однако есть несколько ограничений: бесплатная версия Unity не может быть лицензирована ни одной компании с годовым доходом более 100 000 долларов . Хотя такие организации выходят за рамки данного руководства, если вы подозреваете, что можете стать такой организацией, возможно, стоит выбрать версию Pro.

Pro-версия Unity стоит 75 долларов в месяц или 1500 долларов за постоянную лицензию и не имеет ограничений на то, что вы можете делать с играми, созданными с ее помощью. Существует также 30-дневная бесплатная пробная версия, которую мы будем использовать в этом руководстве, чтобы дать вам как можно более полный обзор доступных функций. Студенческая лицензия на один год также доступна через Студику за $ 129 .

1.2 Особенности

В бесплатной версии Unity есть множество функций. Тем не менее, наиболее важные различия заключаются в следующем: в бесплатной версии Unity отсутствует ряд параметров рендеринга, которые позволяют создавать более качественные и быстро запускающиеся игры (поддержка LOD, постобработка экранного пространства, усовершенствованные шейдеры, программное обеспечение в реальном времени). тени и отложенный рендеринг). Также не хватает полной системы анимации Mechanim и некоторых инструментов AI.

В общем, для сложных, масштабных проектов или проектов, где важна графическая производительность, профессиональная версия имеет смысл. Я использую профессиональную версию, потому что я разрабатываю игры виртуальной реальности для Oculus Rift , и поддержка постобработки экранного пространства необходима для правильного взаимодействия с гарнитурой.

2. Установка Unity

Unity прост в установке. Вы можете скачать исполняемый файл с сайта unity3d.com/get-unity/download .

После загрузки запустите его и следуйте инструкциям установщика. Когда установка будет завершена, появится окно «Активировать лицензию Unity». Установите флажок «активировать бесплатную 30-дневную пробную версию Unity Pro», а затем «ОК».

Поздравляем! Теперь у вас есть 30-дневная пробная версия Unity Pro. По истечении пробного периода, если вы не хотите покупать профессиональную версию, вы можете перейти на бесплатную версию и сохранить существующий контент.

3. Краткое введение в объектно-ориентированную парадигму

Прежде чем начать работу с Unity, важно немного разобраться с основами. Unity поддерживает как C #, так и JavaScript для программирования игр. ; мы будем работать с C # для этого урока.

Прежде всего, если вы никогда не программировали раньше, отложите это руководство и потратьте несколько дней на изучение языка программирования C # от Microsoft, пока не почувствуете себя комфортно при использовании языка для простых задач.

Если вам нужно что-то немного отличающееся от C # (но не обязательно язык, который вы можете использовать в Unity), взгляните на наше руководство по шести самым простым языкам программирования для начинающих простых языков программирования для начинающих простых программирование

Если вы ранее программировали на императивном или объектно-ориентированном языке, таком как C или Java, изучите учебник и ознакомьтесь с тем, как C # отличается от других языков, которые вы использовали в прошлом. В любом случае, не переходите к учебнику, пока не почувствуете себя комфортно, решая простые проблемы с C # (например, если бы я попросил вас написать программу, которая печатает первые сто простых чисел, вы должны быть в состоянии написать эту программу без консалтинг гугл).

Самая важная концепция для понимания — это объектно-ориентированная парадигма. (сокращенно ООП ). В объектно-ориентированных языках программы делятся на функциональные единицы, называемые объектами . Каждый объект имеет свои частные переменные и функции. Специфичные для объекта функции называются методами .

Идея здесь заключается в модульности: изолируя каждый объект и заставляя другие объекты взаимодействовать с ним с помощью его методов, вы можете уменьшить количество возможных непреднамеренных взаимодействий — и, как следствие, ошибок. Вы также можете создавать объекты, которые вы можете использовать позже без изменений. В Unity вы будете строить эти объекты и прикреплять их к игровым объектам (чьим поведением они будут управлять).

Объекты создаются из классов : класс — это просто файл, в котором содержится определение вашего объекта. Итак, если вам нужен объект Mook, который обрабатывает AI для врага в вашей игре, вы должны написать класс «Mook», а затем прикрепить этот файл к каждой вражеской сущности. Когда вы запустите свою игру, каждый враг будет снабжен копией объекта «Mook».

Присоединение нового сценария к объекту выглядит следующим образом:

Программирование игры с помощью Unity: Руководство по игре на единство для начинающих 1

Сначала выберите объект и перейдите к Инспектору . Нажмите на кнопку Добавить компонент .

Программирование игры с помощью Unity: руководство для начинающих.

Перейдите к новому сценарию , введите желаемое имя и нажмите « Создать и добавить» .

Программирование игры с Unity: руководство для начинающих 3

Теперь у вас есть новый скрипт, который вы можете редактировать, дважды щелкнув по нему!

Файл класса выглядит примерно так:

using UnityEngine; public class Mook : MonoBehaviour { private float health; void Start () { health = 100; } void Update(){ if (health > 0) { /* Search for player if you encounter the player on the road, kill him if you get shot, remove a random amount of health */ } } } 

Давайте разберем это:

  • Использование UnityEngine: эта строка сообщает C #, что мы хотим использовать библиотеки Unity, которые позволяют нам подключаться к игровому движку Unity.
  • Открытый класс Mook: MonoBehaviour: эта строка объявляет класс и его имя — Mook .
  • Частное состояние плавающего: здесь объявляется переменная частного класса (которая может быть изменена только внутри класса). Переменной присваивается значение в Start .
  • Void Start (): объявляет метод Start . Запуск — это специальный метод, который запускается только один раз, когда игра запускается изначально.
  • Void Update (): обновление — это еще один специальный метод, который выполняется для каждого кадра. Большая часть вашей игровой логики пойдет сюда.
  • // если вы встретите игрока на дороге, убейте его: эта строка является комментарием (любая строка, начинающаяся с двойной косой черты, игнорируется C #). Комментарии используются, чтобы напомнить себе о том, что делают конкретные биты кода. В этом случае этот комментарий используется для обозначения более сложного блока кода, который фактически выполняет то, что описывает комментарий.

Наряду с Start и Update вы можете создавать свои собственные методы практически с любым именем. Однако созданные вами методы не будут работать, пока они не будут вызваны. Давайте объявим метод для гипотетического класса addTwoNumbers, который добавляет два числа вместе:

 public float addTwoNumbers(float a, float b) { return a+b; } 

Это объявляет открытый (доступный для других объектов) метод, который возвращает число с плавающей точкой, называемое addTwoNumbers , которое принимает два числа с плавающей точкой в ​​качестве входных данных (называемых a и b ). Затем он возвращает сумму двух значений в качестве своего вывода.

Вызов этого метода из одного и того же класса (скажем, из Update ) выглядит следующим образом:

 float result = addTwoNumbers(1, 2); 

Вызов метода из другого класса похож:

 addTwoNumbers instance; float result = instance.addTwoNumbers(1, 2); 

Опять же, это просто создает экземпляр нашего класса, обращается к соответствующему методу и передает ему числа, которые мы хотим добавить, а затем сохраняет результат в результате . Просто.

Если ваш скрипт прикреплен к объекту, обладающему особыми свойствами (например, эмиттером частиц), доступ к которому невозможен при обычном наборе параметров GameObject, вы можете использовать его как игровой объект другого типа с помощью метода GetComponent. ,

Синтаксис для этого выглядит следующим образом:

 GetComponent<ParticleSystem>().Play(); 

Если что-то из этого вам незнакомо, вернитесь назад и пройдите учебник по C #. Это избавит вас от многих разочарований, когда мы начнем.

4. Основы единства

В этом разделе мы собираемся проработать основы механики движка Unity. Рабочий процесс в Unity выглядит примерно так:

  1. Создайте объект, который будет выполнять роль в игре (пустые объекты GameObject могут использоваться для абстрактных логических задач).
  2. Напишите или найдите файл класса и добавьте его в объект в виде сценария (используя кнопку « Добавить компонент» в представлении инспектора .
  3. Выполните > test > debug > repeat, пока оно не заработает, и переходите к следующему элементу игры.

Unity поставляется с множеством основных вкладок, которые могут быть разложены по вкусу пользователя. Большая пятерка:

  1. Игра: отображает запущенный экземпляр игры, с которым вы можете взаимодействовать и тестировать.
  2. Сцена: предоставляет статическую, редактируемую версию игрового мира .
  3. Инспектор: позволяет изменять отдельные объекты в игровом мире, выбирая их на вкладке редактора .
  4. Проект: позволяет просматривать файлы проекта и перетаскивать модели, материалы и другие ресурсы на вкладку редактора, чтобы разместить их в игровом мире.
  5. Иерархия: эта вкладка показывает все объекты в мире, позволяя вам находить удаленные объекты на сцене и родительские объекты друг к другу, щелкая и перетаскивая.

Смотрите схему ниже для определения местоположения всех этих вещей:

Программирование игры с помощью Unity: руководство для начинающих игр Unity 0

4.1 Сущности Единства

4.1.1 Сетки

Сетки — это способ представления трехмерной геометрии в Unity. Вы можете использовать встроенные в Unity примитивные объекты (кубы, сферы, цилиндры и т. Д.) Или импортировать собственные 3D-модели из пакета моделирования, такого как Blender. или Maya Unity поддерживает различные форматы 3D, включая .fbx и .3ds .

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

4.1.2 Элементы GUI

Традиционные графические спрайты и текст могут отображаться с помощью графического текста и текстовых графических объектов GameObjects в редакторе. Однако более надежный и реалистичный способ обработки элементов пользовательского интерфейса — это использовать трехмерный текст и Quad GameObjects (с прозрачными текстурами и неосвещенным прозрачным шейдером) для размещения элементов HUD в игровом мире в качестве сущностей.

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

Элементы графического интерфейса (текст и текстуры) можно настроить по размеру и масштабу с помощью соответствующих полей на вкладке инспектора.

4.1.3 Материалы

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

Чтобы импортировать текстуру, преобразуйте ее в формат .jpg , .png или .bmp и перетащите в папку ресурсов в каталоге проекта Unity (который по умолчанию отображается в « Мои документы »). Через несколько секунд в редакторе появится панель загрузки. Когда он закончится, вы сможете найти изображение в качестве текстуры на вкладке проекта .

4.1.5 Огни

Огни — это GameObjects, которые излучают свет в мир. Если в вашей сцене нет источников света, все полигоны прорисовываются с одинаковым уровнем яркости, что придает миру плоский размытый вид.

Светильники могут быть расположены, повернуты и иметь несколько внутренних характеристик, которые вы можете настроить. Ползунок интенсивности регулирует яркость света, а диапазон — как быстро он гаснет.

Направляющие в виде сцены показывают максимальную дальность освещения. Поиграйте с обоими настройками, чтобы добиться желаемого эффекта. Вы также можете настроить цвет источника света, шаблон ( файл cookie, отображаемый на поверхности, на которую направлен источник света, и вид блика, который появляется на экране, если смотреть прямо на источник света. Файл cookie можно использовать для имитации более реалистичных образцов освещения, создавать драматические ложные тени и моделировать проекторы.

Три основных вида света: точечный , точечный и направленный .

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

Точечные источники света расположены в трехмерном пространстве и излучают свет равномерно во всех направлениях. Точечные светильники не отбрасывают тени.

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

4.1.6 Системы частиц

Система частиц — это GameObject, который генерирует и контролирует сотни или тысячи частиц одновременно. Частицы — это небольшие оптимизированные 2D-объекты, отображаемые в 3D-пространстве. Системы частиц используют упрощенный рендеринг и физику, но могут отображать тысячи объектов в режиме реального времени без заиканий, что делает их идеальными для дыма, огня, дождя, искр, магических эффектов и многого другого.

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

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

5. Пример: основные элементы игры

Для этого урока мы собираемся сделать простую игру в понг — то, что мы уже несколько раз освещали в DIY:

В этом разделе мы рассмотрим расположение основных элементов — руководство по написанию скриптов появится позже.

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

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

Программирование игры с помощью Unity: руководство для начинающих.

Программирование игры с Unity: руководство для начинающих 5

Сначала создайте опору для куба для весла.

Программирование игры с помощью Unity: руководство для начинающих 6

Масштабируйте это соответственно, дублируйте это , и поместите сферу между веслами для шара.

Программирование игры с помощью Unity: руководство для начинающих.

Затем создайте объект 3DText, масштабируйте и располагайте его правильно, изменяя атрибут размера шрифта, чтобы получить менее пиксельное изображение.

Программирование игры с помощью Unity: руководство для начинающих 8

Затем создайте две системы частиц , выберите нужные характеристики и прикрепите их к веслам.

Программирование игры с помощью Unity: руководство для начинающих

Программирование игры с помощью Unity: руководство для начинающих 10

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

Программирование игры с помощью Unity: руководство для начинающих

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

Программирование игры с помощью Unity: руководство для начинающих

Программирование игры с помощью Unity: руководство для начинающих

Если вы нажмете «Играть», теперь вы можете увидеть основные элементы нашей игры. Они пока ничего не сделают, но мы доберемся до этого!

Программирование игры с помощью Unity: руководство для начинающих

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

6. Сценарии в Unity

Когда у вас есть скрипт, прикрепленный к объекту, вы можете изменить его, дважды щелкнув по нему в инспекторе . Это открывает MonoDevelop , среду разработки по умолчанию для Unity. По сути, Monodevelop — это текстовый редактор с функциями, специально оптимизированными для программирования.

Ключевые слова и комментарии выделяются синим и зеленым , а числовые значения и строки отображаются красным . Если вы использовали Eclipse или другие IDE, MonoDevelop очень похож. Вы можете создавать свои скрипты из редактора, чтобы проверять синтаксические ошибки, например так:

Программирование игры с помощью Unity: руководство для начинающих

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

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

Ниже приведен список элементов, которые может иметь объект (взят из представления инспектора одной из наших лопастей в приведенном выше примере):

  1. преобразование
  2. Куб (Сетчатый фильтр)
  3. Box Collider
  4. Mesh Renderer

На каждый из этих аспектов объекта можно влиять из скрипта. Далее мы рассмотрим, как именно.

6.1 Преобразование

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

 transform.position = newPositionVector3; transform.rotation = newRotationQuaternion; transform.localScale = newScaleVector3; 

В приведенных выше примерах именованные переменные имеют типы, указанные в именах. Здесь есть несколько ключевых деталей: положение и масштаб, как и следовало ожидать, хранятся как Vector3s . Вы можете получить доступ к компонентам X , Y и Z каждого (например, transform.position.y дает вам расстояние до объекта над нулевой плоскостью).

Однако, чтобы избежать блокировки карданного подвеса , вращения обрабатываются как кватернионы (четырехкомпонентные векторы). Поскольку ручные манипуляции с кватернионами не интуитивны, вы можете манипулировать поворотами, используя углы Эйлера, используя метод Quaternion.Euler, например так:

 transform.rotation = Quaternion.Euler(pitch, yaw, roll); 

Если вы хотите плавно перемещать объекты из одного места в другое, вам пригодится метод Slerp для кватернионов и vector3s. Slerp принимает три аргумента — текущее состояние, конечное состояние и скорость изменения и плавно интерполирует между ними с заданной скоростью. Синтаксис выглядит так:

 transform.position = Vector3.Slerp(startPositionVector3, newDestinationVector3, 1); 

6.2 Рендерер

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

 renderer.enabled = false; renderer.material.color = new Color(0, 255, 0); renderer.material.mainTexture = myTexture; renderer.material.shader = newShader; 

Большинство из них имеют довольно четкие функции. Первый пример делает рассматриваемый объект невидимым: полезная уловка в ряде ситуаций. Во втором примере назначается новый цвет RGB (а именно зеленый) для рассматриваемого объекта. Третий назначает основную диффузную текстуру новой переменной текстуры. В последнем примере шейдер материала объекта изменяется на вновь определенную переменную шейдера.

6.3 Физика

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

Все физические реквизиты требуют коллайдеров . Однако само фактическое моделирование выполняется жестким телом , которое может быть добавлено в виде инспектора . Твердые антитела могут быть кинематическими или не кинематическими .

Кинематические реквизиты физики сталкиваются (и воздействуют) на некинематические физики вокруг них, но сами столкновения не затрагивают их. Статические кинематические подпорки — это общеизвестные неподвижные объекты, а движущиеся кинематические объекты — пресловутая непреодолимая сила (для примера, когда они сталкиваются, они просто проходят друг через друга).

Кроме того, вы можете отрегулировать угловое сопротивление объекта (сколько энергии требуется для его вращения), изменить его массу, определить, зависит ли это от силы тяжести или применить к нему силы.

Примеры:

 rigidbody.angularDrag = 0.1f; rigidbody.mass = 100; rigidbody.isKinematic = false; rigidbody.useGravity = true; rigidbody.AddForce(transform.forward * 100); 

Все это довольно очевидно. Единственное, что здесь следует отметить — это использование transform.forward . У Vector3 есть три компонента ( .forward , .up и .right ), связанные с ними, к которым можно обращаться и вращать их ( вперед — направление синей стрелки в редакторе). Ключевое слово transform.forward — это просто прямой вектор для текущего объекта с величиной 1. Его можно умножить на число с плавающей точкой, чтобы создать больше силы для объекта. Вы также можете ссылаться на transform.up и transform.right и отменять их, чтобы получить обратное.

6.4 Столкновение

Часто при создании игры вы хотите, чтобы столкновение приводило к некоторому изменению состояния в вашем коде, помимо физического моделирования. Для этого вам понадобится метод обнаружения столкновений .

Для обнаружения коллизий в Unity требуется определенная подготовительная работа. Во-первых, по крайней мере один из объектов в столкновении нуждается в не кинематическом твердом теле, прикрепленном к нему. Оба объекта должны иметь правильные коллайдеры, которые должны быть не триггерами. Общая скорость обоих объектов должна быть достаточно низкой, чтобы они фактически сталкивались, вместо того, чтобы просто пропускать друг друга.

Если вы позаботились обо всем этом, вы можете проверить наличие столкновений, поместив специальный метод обнаружения столкновений в скрипт, прикрепленный к объекту, с которым вы хотите проверить столкновение. Метод будет выглядеть так:

 void OnCollisionEnter(Collision other) { //do things here } 

Этот метод будет автоматически запускаться во время первого кадра, когда другой объект касается вашего объекта. Объект столкновения other — это ссылка на объект, который вы ударили. Например, вы можете ссылаться на его игровой объект , жесткое тело и преобразовывать характеристики, чтобы манипулировать им различными способами. Хотя OnCollisionEnter , вероятно, является наиболее распространенной функцией, которую вы будете использовать, вы также можете использовать OnCollisionExit и OnCollisionStay (с другим идентичным синтаксисом и использованием), которые активируются во время первого кадра, в котором вы прекращаете сталкиваться с объектом, и во время каждого кадра, который вы ‘ столкновение с объектом, соответственно.

Иногда также может быть полезно сделать то, что называется радиовещанием . В радиопередаче бесконечно тонкая линия ( луч ) проходит через мир от некоторого источника вдоль некоторого вектора, и, когда он достигает чего-то, возвращаются положение и другие детали первого столкновения. Код для Raycast выглядит так:

 RaycastHit hit; if (Physics.Raycast(transform.position, -Vector3.up, out hit)) { float distanceToGround = hit.distance; } 

Это отбрасывает луч из позиции текущего объекта вдоль -Vector3.up (прямо вниз) и связывает попадание переменной с первым объектом, с которым он сталкивается. Как только ваш луч что-то ударил, вы можете получить доступ к hit.distance, чтобы определить, как далеко он находится, или hit.GameObject, чтобы манипулировать объектом, по которому вы попали.

Подобные радиопередачи могут использоваться стрелками для определения того, на что направлено оружие, или для выбора объектов, когда на них смотрит камера, или для определенных стилей движения.

6.5 Коррекция времени

Когда вы манипулируете объектами таким образом, вы должны иметь в виду один важный фактор, связанный с частотой кадров . Независимо от того, насколько тщательно вы оптимизируете, частота кадров всегда будет меняться, и вы не хотите, чтобы скорость вашей игры изменялась соответственно. Если кто-то запускает вашу игру на более быстром компьютере, чем вы его разработали, вы не хотите, чтобы игра работала с двойной скоростью.

Вы можете исправить это путем умножения значений, которые вы используете, на время, необходимое для рендеринга последнего кадра. Это делается с помощью Time.deltaTime . Это эффективно изменяет скорость любой переменной, которую вы увеличиваете каждый кадр, от изменения на кадр к изменению в секунду , и вам, вероятно, следует внести это изменение в любое значение, которое вы увеличиваете или уменьшаете каждый кадр.

6.6 Аудио источники и слушатели

Теперь, когда мы рассмотрели, как создавать, визуализировать и управлять объектами, давайте поговорим о другом смысле, который могут служить компьютерным играм: а именно о звуке . Unity поддерживает два вида звуков: 2D и 3D звуки. 3D-звуки изменяют свою громкость в зависимости от расстояния и искажают, когда они движутся относительно камеры; 2D звуки нет.

2D-звуки подходят для наложения голоса и фоновой музыки, а 3D-звуки применяются к звукам, генерируемым событиями в мире. Чтобы изменить, является ли звук трехмерным, выберите его в представлении проекта , переключитесь на представление инспектора и выберите соответствующий параметр в раскрывающемся меню, затем нажмите кнопку повторного импорта .

Чтобы фактически воспроизвести звук, вам нужно будет прикрепить аудиоисточник к пропелле (опору, из которой вы хотите, чтобы звук исходил, в случае трехмерного звука). Затем вам нужно открыть поле аудиоклипа и выбрать звуковой файл.

Вы можете использовать myAudioSource.Pause () и myAudioSource.Play () для управления этими звуковыми файлами. Вы можете настроить поведение спада, громкость и допплеровское смещение звуков на вкладке инспектора для аудиоисточника.

6.7 Ввод

Игра, не требующая участия пользователя, не является игрой. Существует много разных видов ввода, которые вы можете прочитать, и почти все они доступны через объекты Input и KeyCode . Некоторые примеры операторов ввода (которые имеют значения, оцениваемые в каждом кадре) приведены ниже.

 Vector3 mousePos = Input.mousePosition; bool isLeftClicking = Input.GetMouseButton(0); bool isPressingSpace = Input.GetKey(KeyCode.Space); 

Функции этих линий в основном говорят сами за себя. Используя эти три вида входных ссылок, вы можете реконструировать схемы управления большинством современных 3D компьютерных игр.

6.8 Отладка скрипта

Допустим, скрипт не работает. Как говорит хороший доктор, с вами может случиться бангпс и хангпс. Если с вашим C # есть прямые синтаксические ошибки, игра, как правило, отказывается запускаться, когда вы нажимаете на кнопку play, и при создании сценариев из редактора предоставляются некоторые довольно полезные сообщения об ошибках. См. ниже:

Программирование игры с помощью Unity: руководство для начинающих

Эти ошибки, как правило, не самые трудные для исправления. Что может быть более проблематичным, это тонкие семантические ошибки, в которых вы успешно написали файл, полный допустимого C #, но не тот, который делает то, что вы думали. Если у вас есть одна из этих ошибок, и вы не можете отследить ее, есть несколько вещей, которые вы можете попытаться улучшить.

Первое — приостановить выполнение игры и проверить консоль. Вы можете приостановить игру, щелкнув значок паузы в верхней средней части редактора, а затем выбрав консоль в нижней части меню окна (или нажав Ctrl > Shift > C ). Даже если ошибок нет, предупреждения могут помочь понять, что может пойти не так.

Если это не работает, вы также можете попытаться получить представление о состоянии вашего скрипта, напечатав состояние внутренних переменных, чтобы проверить, что программа делает то, что, по вашему мнению, она делает. Вы можете использовать Debug.Log (String) для вывода содержимого строки на консоль, когда выполнение программы достигает этой строки. В общем, если вы работаете в обратном направлении от того, что, по вашему мнению, должно происходить, через то, что должно происходить, в конечном итоге вы достигнете точки, когда ваши отладочные отпечатки не будут делать то, что вы ожидаете от них. Вот где ваша ошибка.

7. Пример: сценарий понг

Чтобы построить понг, давайте разберем игру на ее основные элементы: нам нужен шар, который рикошетит назад и вперед между веслами с увеличивающейся скоростью, нам нужно табло, которое знает, когда шары прошли весла, и нам нужен механизм для перезапуск мяча, когда это произойдет. Хорошим первым шагом было бы добавить не кинематическое твердое тело к мячу, два кинематических жестких тела к лопастям, отключить гравитацию для всех них и назначить соответствующий физический материал из стандартных активов ( отскок с отскоком объединить, установленный для умножения ) ,

Ниже вы можете посмотреть сценарий бала с пояснительными комментариями. Мяч должен достигать некоторых основных целей: он должен подпрыгивать в сложной схеме, всегда поддерживая движение по обеим осям, и должен ускоряться в сложном, но не невозможном темпе в горизонтальном направлении.

BallHandler.cs

Далее нам нужно написать скрипт нашего весла, который вы можете посмотреть ниже. Весло должно перемещаться вверх и вниз в ответ на нажатия клавиш (но не вне определенных границ). Это также должно вызвать систему частиц, когда она сталкивается с чем-то.

PaddleHandler.cs

Далее нам нужен вражеский ИИ: то, что заставит вражеское весло двигаться по направлению к мячу с фиксированной скоростью. Для этого мы будем использовать Vector3.Slerp для максимальной простоты. Мы также хотели бы, чтобы то же поведение частиц, которое мы видим на нашем собственном весле.

EnemyAI.cs

Наконец, нам нужен скрипт для обновления табло и сброса мяча, когда он выходит за пределы поля.

ScoreboardUpdater.cs

С этими прилагаемыми сценариями и заполненными ссылками, когда мы запускаем нашу игру Pong, мы испытываем игровой процесс!

Программирование игры с помощью Unity: руководство для начинающих

Вы можете скачать мое демо Понг , если хотите увидеть все, что я изложил в действии. Он работает в системах Windows, Mac и Linux.

8. Изучение документации / обучение

Unity — это сложный движок с гораздо большим количеством функций, чем можно было бы охватить в руководстве по этому стилю, и это еще до того, как вы включите широкий спектр (бесплатных и коммерческих) расширений Unity, доступных в Интернете. Это руководство даст вам хорошую стартовую площадку для разработки игры, но самообразование является важным навыком в любом начинании, и вдвойне здесь.

Важнейшим ресурсом здесь является Unity ScriptReference . ScriptReference — это база данных с возможностью поиска, доступная как для C #, так и для Javascript, в которой есть список всех команд и функций Unity с описанием их функций и краткими примерами синтаксиса.

Если у вас возникли проблемы с редактором и интерфейсом Unity, или вам просто нравятся видеоуроки в качестве предпочтения, существует длинный список высококачественных видеоуроков учебники доступно. Более обширные (но менее обширные) текстовые учебники по Unity также доступны от CatLikeCoding.

Наконец, если у вас есть вопросы, выходящие за рамки документации или учебных пособий, вы можете задать конкретные вопросы по адресу answers.Unity3d.com . Помните, что ответы предоставляются добровольцами, поэтому уважайте их время и сначала поищите в базе данных, чтобы убедиться, что на ваш вопрос еще не ответили.

9. Сборка вашей игры / Компиляция в отдельное приложение

Когда вы создали что-то, чем вы гордитесь (или вы закончили клонировать наш слегка изворотливый пример Pong для практики), пришло время вывести свою игру из редактора и превратить ее в то, что вы можете опубликовать в Интернете и заставить ваши друзья и семья, чтобы играть. Для этого вам необходимо создать отдельное приложение. Хорошей новостью является то, что в Unity это очень легко. Есть, однако, несколько потенциальных икоты, о которых вы хотите быть осторожными.

Для начала знайте, что вы можете создать только безошибочный проект. Для этого убедитесь, что при сборке у вас открыта консоль: существуют некоторые ошибки, которые игра будет игнорировать в редакторе, но все равно прервет попытку сборки. Это только выводит сообщения об ошибках в консоль, без видимых результатов на экране, что может расстраивать, если вы забудете проверить. Как только вы получите безошибочную компиляцию игры, вы можете выбрать Build Settings в меню File или нажать Ctrl > Shift.
> Б. Это откроет простой диалог, который позволит вам построить свою игру для нескольких платформ.

Программирование игры с помощью Unity: руководство для начинающих

Процесс оттуда самоочевиден: выберите ваши варианты и нажмите « построить» ; игра предложит вам каталог для установки и поместит туда каталог с исполняемыми файлами и данными. Эти два файла можно сжать вместе и распространять (просто убедитесь, что вы не взимаете плату за игру, созданную в демоверсии Unity, поскольку это нарушает условия обслуживания).

10. Заключительные заметки

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

Сначала получите самые важные элементы: имейте в виду ваш минимально жизнеспособный продукт , самую простую, самую простую вещь, которую вы могли бы создать, и при этом все равно чувствуете, что достигли чего-то стоящего. Доберитесь до этого минимально жизнеспособного проекта, прежде чем переходить к большим амбициям

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

Если вы все это прочитали и немного перегружены кодированием, необходимым для Unity, обязательно узнайте, как научиться разрабатывать игры с Unity Learn. освоить разработку игр. освоить. а также прочитайте наше руководство о том, как создавать видеоигры без какого-либо программирования создавать видеоигры без какого-либо программирования создавать видеоигры без какого-либо программирования

Unity — это мощный инструмент, и с небольшим количеством исследований вы сможете создавать впечатляющие проекты с его помощью быстрее, чем вы ожидаете. Дайте нам знать, что вы создали в комментариях ниже — мы хотели бы видеть!

Похожие посты
Программирование

Что такое канал RSS? (И где его взять)

Программирование

7 причин, почему изображения не загружаются на ваш сайт

Программирование

Запустите агент SQL Server: настройте SQL Server 2012

Программирование

15 лучших бесплатных обоев дня Святого Патрика