Keep your place in this quest

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

В этом уроке мы рассмотрим новый способ активации событий внутри игры.

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

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

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

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

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

1. Создание Платформы

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

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

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

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

image.png

2. Создание Логики Платформы

Теперь давайте создадим новый Логический Блок и свяжем его с нашим Элементом платформы.

Внутри этого Логического Блока мы разрабатываем логику, отвечающую за управление поведением платформы и её взаимодействием с остальной частью системы.

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

Поскольку эта платформа, вероятно, является чем-то, что вы захотите переиспользовать, настройка через Шаблон обычно является хорошим вариантом.

image.png

Сначала давайте создадим два свойства.

Первое свойство будет добавлено к Логическому Блоку платформы. Оно должно быть Int свойством с названием Кнопки.

Это свойство позже будет хранить общее количество кнопок, доступных на карте.

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

image.png

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

Для этого в 3D Виде щелкните по небу/фон у сцены, чтобы выбрать саму Сцену.

Затем в панели Свойств вы должны увидеть, что выбранный тип объекта - это Сцена, вместе с названием текущей сцены.

Это свойство будет использоваться позже для хранения и обмена глобальной информацией.

image.png

Щелкните на вкладку Свойства в Сцене и создайте новое свойство с названием Количество Кнопок.

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

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

Кратко:

  • Кнопки принадлежат платформе и хранят, сколько кнопок существует.
  • Количество Кнопок принадлежит Сцене и хранит, сколько кнопок уже было активировано.

image.png

Теперь, когда мы создали два свойства, одно в Сцене и одно в Логическом Блоке платформы, давайте начнем разрабатывать логику платформы.

Вернитесь к Графу.

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

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

Сначала получите Сцену и используйте узел, который ищет все Элементы с тегом кнопка.

Мы еще не создали кнопки, но мы уже можем подготовить эту логику, потому что мы добавим этот тег к ним позже.

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

Это значение представляет общее количество кнопок, присутствующих в сцене.

Наконец, сохраните этот результат в свойстве Кнопки платформы через Установить Кнопки.

image.png

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

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

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

Сначала получите Сцену и получите доступ к её свойствам.

Поскольку мы ранее создали свойство Количество Кнопок в Сцене, мы можем получить к нему доступ через узел Получить Свойства, который возвращает словарь, содержащий все свойства Сцены.

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

По умолчанию выходные данные Получить Свойство имеют тип Любой.

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

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

Если оба значения равны, это означает, что все кнопки были активированы игроком.

В этот момент мы можем выполнять желаемое действие.

В этом примере мы уберем Элемент платформы из сцены.

image.png

Отлично. Логика нашей платформы теперь готова.

Платформа уже может автоматически определять, когда игра начинается, сколько кнопок существует на карте.

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

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

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

Это означает, что коммуникация между элементами уже запланирована:

  • платформа считает, сколько кнопок существует
  • каждая кнопка будет обновлять свойство Сцены, когда активируется
  • платформа проверяет свойство Сцены
  • когда количество совпадает с общим, платформа выполняет своё действие

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