Keep your place in this quest

Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.

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

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

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

1. Создание предмета

В панели Content создайте новый Asset типа Entity Template.

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

image.png

Откройте Template сущности, чтобы мы могли ее отредактировать.

Затем переименуйте сущность в Item и создайте новую Mesh, которая будет отвечать за визуальное представление объекта.

В разделе Components добавьте компонент Transform. Transform дает сущности доступ к свойствам позиции, вращения и масштаба, которые необходимы для размещения и манипуляции предметом в 3D мире.

После этого добавьте также компонент Rigid Body. Этот компонент будет отвечать за физику и поведение столкновения предмета внутри сцены.

image.png

В компоненте Rigid Body включите опцию Ghost.

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

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

image.png

На этом этапе вы можете импортировать 3D модель в Cave и использовать ее как Mesh вашего предмета.

В этом примере мы будем использовать только 2D значок, созданный из текстуры, поэтому не потребуется импортировать кастомную модель. Но не стесняйтесь настраивать визуальный вид предмета так, как вам угодно, в зависимости от потребностей вашего проекта.

Например, вы можете использовать:

  • модель монеты
  • модель ключа
  • бутылку с зельем
  • плавающий кристалл
  • значок усиления
  • простой текстурированный плоскость

Теперь, как мы создали сущность раньше, создайте новый Material в панели Content.

Затем настройте его в соответствии с визуальным стилем, который вы хотите для своей игры, добавляя необходимые текстуры, такие как Albedo, Normal Map или любые другие карты, которые вы хотите использовать.

image.png

image.png

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

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

image.png

image.png

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

Хорошей практикой является создание папки с названием Item и перемещение всех файлов, связанных с этим собираемым предметом, в нее, таких как Entity Template, материалы, текстуры и любые другие ресурсы, используемые этим объектом.

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

image.png

Теперь давайте создадим новый Logic Brick для нашего предмета.

Этот Logic Brick будет отвечать за добавление непрерывного вращения к объекту, что упростит задачу игроку заметить его в сцене.

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

image.png

Для этого мы просто получим Entity и получим доступ к его Transform.

Затем добавьте узел Rotate On Yaw, который отвечает за применение вращения вокруг Y оси, вертикальной оси объекта.

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

Наконец, подключите Transform к Rotate On Yaw и выполните эту логику через On Update, чтобы предмет вращался непрерывно во время игры.

image.png

В конце концов, давайте добавим Tag к нашему предмету, чтобы его можно было идентифицировать в логике сбора Игрока позже.

Выберите вкладку Tags, создайте новый тег с названием item и назначьте его собираемой сущности.

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

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

image.png

На этом этапе собираемый предмет готов к использованию в сцене.

У него есть визуальное представление, материал, призрачное столкновение для обнаружения, Logic Brick для вращения и тег item, который позволит Игроку распознать его позже.