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

Исходная информация 1 — Структура проекта Unity

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

Если мы теперь посмотрим на структуру файловой системы (откроем папку и перейдем туда, где находится проект), то увидим, что в папке «OurFirstProject» много папок. Я не буду долго объяснять, для чего нужны эти папки, но самая важная папка для нас — это папка «Активы». В этой папке у нас будут все наши важные вещи, такие как наши скрипты, префабы, модели и т. д., поэтому убедитесь, что вы это помните. Однако по умолчанию у нас есть только одна папка с именем «Сцены», которая, конечно же, содержит нашу сцену по умолчанию на данный момент.

Фон 2 — Интерфейс Unity

Более подробно о каждом разделе интерфейса Unity вы можете прочитать в официальной документации. Но быстро,

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

Исходная информация 3. Почему бы не внедрить обучение с подкреплением сразу?

По моему опыту, очень важно, чтобы мы проверяли, как система (в нашем случае объект) движется и ведет себя так, как мы ожидаем, что она будет двигаться и вести себя. Лучший и самый простой способ сделать это — управлять системой вручную. Позже мы увидим, что мы можем визуально проверить функцию вознаграждения, управляя системой вручную. Но пока давайте не будем беспокоиться о том, что такое награда или даже что такое обучение с подкреплением!

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

Давайте сделаем наземный самолет!

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

Если у вас есть опыт создания 3D-объектов с помощью программного обеспечения для 3D-моделирования, такого как Blender, то это будет почти то же самое. В противном случае не волнуйтесь, это будет супер легко!

На панели «Иерархия» щелкните правой кнопкой мыши, затем «3D-объект» -> «Плоскость».

Вот и все! супер легко, как я сказал.

Изменить позицию

По умолчанию любой объект, который мы создаем, будет создан в центральной точке нашей точки обзора, что означает, что он может не находиться в нашем начале координат (координаты x, y, z равны 0, 0, 0). Итак, давайте установим положение нашей плоскости в исходное положение:

  1. Нажмите на самолет.
  2. Щелкните правой кнопкой мыши «Преобразование» на правой панели под названием «Инспектор».
  3. Выберите «Сброс».

Вы должны были увидеть, как значения в «Позиции» изменились на (0, 0, 0).

*Примечание: каждый объект будет иметь предопределенный Unity размер, поэтому размер Plane по умолчанию составляет 10 м x 10 м x 10 м. Для куба это 1 м х 1 м х 1 м.

Сделаем куб!

Точно так же, как при создании плоскости, на панели «Иерархия» щелкните правой кнопкой мыши, затем «3D-объект» -> «Куб».

Давайте изменим куб!

Поскольку куб имеет свою собственную систему координат, начинающуюся из его центра, имеется смещение в 50 см в каждом направлении. Это означает, что если у нас была плоскость в качестве земли в начале координат, то куб будет наполовину погружен в землю. Поэтому нам нужно добавить это смещение 0,5 в направлении Y, чтобы поднять куб до уровня плоскости.

Изменить масштаб

Итак, прямо сейчас размер нашего куба составляет 1 м x 1 м x 1 м. Я думаю, что это немного велико, поэтому я собираюсь изменить его на 50 см каждый. Я могу сделать это, изменив значения «Масштаб» в разделе «Преобразование» на панели «Инспектор» на 0,5 каждое.

Это означает, что мы должны снова изменить смещение по оси Y на 0,25.

Более сложная тема — разные системы координат (эту часть можно пропустить)

В Unity у нас есть разные оси для каждого создаваемого нами объекта — мы также называем их «фреймами» или «системами координат». Чтобы уточнить, система координат сцены — это то, что мы называем «глобальной» или «мировой» системой координат (мы также можем называть ее глобальной или мировой рамкой).

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

Итак, когда мы создаем куб, а затем устанавливаем его положение в начало координат (0, 0, 0), мы выравниваем начало локальной системы координат куба с началом нашей глобальной системы координат.

Следует также отметить, что когда мы создаем куб размером 1 м x 1 м x 1 м, куб расширяется на 50 см от начала локальной системы координат в каждом направлении, образуя длину 1 м с каждой стороны.

Физический движок Unity

Вам может быть интересно, как мы на самом деле управляем кубом, чтобы он двигался по плоскости? Это очень хороший вопрос! Мы могли бы перемещать куб, изменяя положение куба в каждом кадре нажатием клавиши в каждом направлении, или, может быть, также перемещать его, назначая ускорение каждой клавише и длительность нажатия клавиши?

Я имею в виду… мы могли бы? но это включает в себя слишком много математики и физики — мы определенно хотим избегать как можно большего количества математики и физики, если можем, потому что даже мысль об этом вызывает у меня головную боль.

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

Прикрепите Rigidbody к кубу

На левой панели «Иерархия» щелкните объект «Куб». Затем на правой панели «Инспектор» внизу нажмите кнопку «Добавить компонент». Найдите «Жесткое тело» и выберите «Жесткое тело», а не «Жесткое тело 2D».

Вот и все, что нужно для присоединения твердого тела и, следовательно, присоединения физического движка!

Вот и все!

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

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

Спасибо, что прочитали эту статью, надеюсь, она была вам полезна!