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

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

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





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





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





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

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



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

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





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

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





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

§4 – Основы Unity

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

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

§7 - Пример: скриптинг Pong

§8 – Изучение документации / Дополнительные сведения

§9 - Создание игры / компиляция в автономное приложение

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

1. Версии Unity

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

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

1.1 Цены

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

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

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

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

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

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

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

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

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

2 проигрывателя на разных устройствах

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

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

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

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

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

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

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

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

Присоединение нового скрипта к объекту выглядит так:

Первый, выберите объект и перейти к Инспектор . Нажать на Добавить компонент кнопка.

Перейти к новый сценарий , введите желаемое имя и нажмите создать и добавить .

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

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

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: Эта строка объявляет класс и его имя - болтать .
  • Состояние частного поплавка: Это объявляет частную переменную класса (которую можно изменить только внутри класса). Переменной присваивается значение в Начинать .
  • Начало пустоты (): Это объявляет метод, называемый Начинать . Старт - это особый метод, который запускается только один раз при первом запуске игры.
  • Обновление пустоты (): Обновление - это еще один специальный метод, который выполняется для каждого кадра. Здесь пойдет большая часть вашей игровой логики.
  • // если вы встретите игрока на дороге, убейте его: Эта строка является комментарием (любая строка, начинающаяся с двойной косой черты, игнорируется C #). Комментарии используются, чтобы напомнить себе о том, что делают определенные фрагменты кода. В этом случае этот комментарий используется для замены более сложного блока кода, который фактически выполняет то, что описывает комментарий.

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

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

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

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

float result = addTwoNumbers(1, 2);

Вызов метода из другого класса аналогичен:

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

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

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

Синтаксис для этого выглядит так:

GetComponent().Play();

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

4. Основы Unity

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

  1. Создать объект, который будет играть роль в игре (пусто GameObjects может использоваться для абстрактных логических задач).
  2. Напишите или найдите файл класса и добавьте его в сущность как сценарий (используя Добавить компонент кнопка в инспектор Посмотреть.
  3. Запустить > тестовое задание > отлаживать > повторить пока он не сработает, и переходите к следующему элементу игры.

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

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

На схеме ниже показано расположение всех этих вещей:

4.1 Сущности Unity

4.1.1 Сетки

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

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

4.1.2 Элементы графического интерфейса пользователя

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

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

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

4.1.3 Материалы

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

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

4.1.5 Огни

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

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

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

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

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

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

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

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

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

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

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

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

В этом уроке мы сделаем простую игру Понг - кое-что, о чем мы уже несколько раз рассказывали в DIY:

  • Ардуино классический понг
  • Arduino OLED-понг

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

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

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

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

Масштабируйте его соответствующим образом, продублируйте это , и поставить сфера между лопастями для мяча.

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

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

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

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

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

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

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

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

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

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

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

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

  1. Преобразовать
  2. Куб (сетчатый фильтр)
  3. Коробочный коллайдер
  4. Средство рендеринга сетки

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

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

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

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

В приведенных выше примерах именованные переменные относятся к типам, указанным в именах. Здесь есть несколько ключевых деталей: положение и масштаб, как и следовало ожидать, хранятся как Vector3s . Вы можете получить доступ к Икс , А ТАКЖЕ , а также С УЧАСТИЕМ компоненты каждого (например, transform.position.y дает вам расстояние до объекта над нулевой плоскостью).

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

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

Если вы хотите плавно перемещать объекты из одного места в другое, вы найдете Slerp метод для кватернионов и векторов полезен. 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 состоят из трех компонентов ( .вперед , .вверх , а также .Правильно ), связанные с ними, к которым можно получить доступ и которые вращаются вместе с ними ( вперед направление синей стрелки в редакторе). В transform.forward ключевое слово - это просто прямой вектор для текущего объекта с величиной 1. Его можно умножить на число с плавающей запятой, чтобы создать больше силы для объекта. Вы также можете сослаться на transform.up а также transform.right , и отрицать их, чтобы получить их обратное.

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

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

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

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

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

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

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

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

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

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

6.5 Временная коррекция

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

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

6.6 Источники звука и слушатели

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

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

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

"без интернета, безопасный"

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

6.7 Ввод

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

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

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

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

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

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

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

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

7. Пример: Scripting Pong

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

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

BallHandler.cs

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

PaddleHandler.cs

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

EnemyAI.cs

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

ScoreboardUpdater.cs

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

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

8. Изучение документации / Дополнительные сведения

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

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

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

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

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

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

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

> B . Это вызовет простой диалог, который позволит вам создать игру для нескольких платформ.

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

10. Заключительные примечания

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

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

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

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

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

Делиться Делиться Твитнуть Эл. адрес 3 способа проверить, является ли электронное письмо настоящим или поддельным

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

Читать далее
Похожие темы
  • Программирование
  • Программирование
  • Длинная форма
  • Длинная направляющая
Об авторе Андре Инфанте(131 опубликованная статья)

Писатель и журналист, живущий на юго-западе, Андре гарантированно сохранит работоспособность при температуре до 50 градусов по Цельсию и водонепроницаем на глубине до двенадцати футов.

Ещё от Andre Infante

Подписывайтесь на нашу новостную рассылку

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

Нажмите здесь, чтобы подписаться