Визуальные сценарии популярны как среди художников, так и среди программистов. Выбор между традиционным программированием и визуальным написанием сценариев часто сводится к личным предпочтениям, а также к тому, насколько сложными должны быть ваши игровые проекты.
Хотя Unity в настоящее время работает над собственной системой визуальных сценариев, аналогичной их системам Shader Graph и VFX Graph, мы по-прежнему можем использовать визуальные сценарии в Unity, и у нас есть довольно много пакетов на выбор. Я использовал Playmaker и некоторые другие, но в итоге сделал Bolt своим любимым плагином. В этом кратком руководстве основное внимание уделяется Bolt,
хотя многие термины и правила аналогичны в других пакетах.
Почему визуальные сценарии?
Визуальные сценарии получают плохую репутацию от программистов за то, что они «не так настраиваемы», как традиционное программирование в том смысле, что вы ограничены тем, что доступно для использования прямо из коробки.
Но давайте будем честными: традиционному программированию сложно научиться, и не все готовы вкладывать силы и время.
Хорошая новость: вам не нужно знать программирование, чтобы создать игру, вам просто нужно понимать логику игры.
Независимо от того, какой путь вы выберете, вам все равно нужно понимать основную механику.
Самое приятное то, что визуальные сценарии значительно упрощают этот процесс, поскольку вы можете видеть связи между узлами.
Это может помочь вам визуализировать, что происходит, когда начинается анимация игрока или когда вражеский персонаж обнаруживает что-то странное, бегающее на расстоянии.
При написании кода со временем вы увидите эти связи в своей голове, но для новичков это может занять некоторое время. Визуальные сценарии создают соединения, созданные для вас.
В качестве бонуса вам не нужно беспокоиться о правильном синтаксисе и опечатках, вам просто нужно знать, какие узлы использовать и как их соединить с другими.
Визуальные сценарии в Bolt
Давайте рассмотрим некоторые общие концепции визуальных сценариев, терминологию и общий обзор с использованием Bolt. Другие системы визуальных сценариев могут иметь аналогичные функции, но это характерно только для Bolt.
При первой установке Bolt рекомендуется придерживаться Human Naming.
Если вы программист и привыкли что-то писать, вы можете использовать Programmer Naming. Для новичков Human Naming значительно упростит понимание и поиск узлов.
Вместо добавления сценария к объекту мы начинаем с добавления Flow Machine. Это компонент, поэтому вам нужно искать его с помощью кнопки «Добавить компонент». Flow Machines принимают макрос, который, по сути, контролирует все. Думайте о макросе как о скрипте, который требует правильной работы Flow Machine.
Для простоты используйте традиционный макрос, а не тип Embed. Вы можете повторно использовать этот макрос для других объектов, что невероятно полезно, если вы создаете общую механику, которая может использоваться с несколькими объектами.
При создании Flow Machine вы также увидите добавляемый компонент переменных. Это для объектных переменных. Эти переменные будут общими для всего объекта, что означает, что если у вас есть несколько макросов, прикрепленных к этому объекту, все они могут использовать одни и те же переменные объекта.
Это также работает аналогично общедоступным переменным в традиционном программировании. Обычно вы используете их, если хотите назначить им что-то от инспектора.
После создания потокового графа и макроса вы можете щелкнуть мышью, чтобы отредактировать график. Переход в полноэкранный режим предоставит вам больше возможностей для просмотра всех различных типов переменных, которые вы можете использовать.
В этой статье мы сосредоточимся только на трех из них: переменные Graph, Object и Scene.
Переменные графа, по сути, являются частными и доступны только для этого графа. Они будут включать любые переменные, которые вы не будете изменять вручную, а вместо этого используете график для изменения значения. Примером этого может быть «жесткое кодирование» значения времени или установка максимального здоровья персонажа по умолчанию.
Переменные объекта, как мы обсуждали, могут быть доступны через любой макрос объекта, а также могут быть назначены в инспекторе. Это могут быть такие вещи, как доступ к аниматору, прикрепленному к другому объекту, или добавление переменных для назначения определенных аудиоклипов с панели вашего проекта. Обратите внимание, что для того, чтобы увидеть их полностью,
В режиме экрана необходимо, чтобы объект был выбран в Иерархии. Если вы этого не сделаете, они будут недоступны.
Переменные сцены - это, по сути, глобальные переменные, к которым может получить доступ любой объект в этой конкретной сцене. Вы могли бы использовать это для таких вещей, как игровой менеджер или система событий, которые могут ссылаться на одну переменную сцены.
Логика игры
Когда вы впервые откроете график, вы увидите два узла (также называемые «Единицы в Bolt»), начальную и обновленную единицы. В программировании на C # для Unity они обычно называются методами. Важно отметить, как они работают, поскольку они являются «встроенными» модулями, которые Unity вызывает автоматически в разное время.
Старт вызывается сразу после запуска игры и вызывается только один раз. Вы можете использовать это, чтобы установить начальные значения для здоровья, получить ссылку на определенную позицию или вращение при запуске игры или ссылаться на другие объекты, которые были созданы в игре во время выполнения.
Обновление вызывается несколько раз в секунду.
Этим можно злоупотреблять и использовать неэффективно, поэтому следует опасаться частого использования этого. Обычно вы используете это, чтобы проверить изменение ввода, например, когда игрок нажимает клавишу или кнопку. Вы также можете использовать это для обновления значения в игре с течением времени, например, уменьшение индикатора здоровья или даже игрового таймера,
хотя есть способы сделать это лучше.
Давайте начнем с простого примера того, как они будут работать вместе для отображения сообщения на консоли. Консоль - ваш лучший друг для определения, допустили ли вы ошибку в своей игровой логике, будь то опечатка или в случае визуального сценария вы забыли связать значение с узлом.
Это также уведомит вас, если вы неправильно подключили узлы.
Мы можем использовать это для отображения сообщения, которое я часто использую в традиционном программировании, чтобы быстро проверить, работает ли что-то должным образом.
Мы сделаем это из начального модуля, щелкните правой кнопкой мыши рядом с запуском в открытой области графика, и вы получите возможность добавить модуль, оттуда вы получите меню, отображающее все виды единиц, которые мы можем использовать. Введите журнал отладки. Это создаст новый модуль, который позволит нам подключить его к Start.
Зеленые стрелки должны быть соединены вместе.
Соединяя зеленую стрелку Start с зеленой стрелкой Debug Unit, мы говорим, что Start затем должен выполнить действие того, что должен сделать Debug Unit. В этом случае он просто отображает сообщение в консоли. Поскольку это начальный блок, он один раз отобразит сообщение, а затем больше ничего не сделает.
В данный момент,
у нас нет способа изменить сообщение модуля Debug, но ниже мы можем предоставить значение String. Строка - это, по сути, набор букв, которые помогают нам составлять слова и предложения в программном смысле. Мы можем создать единицу для сообщения, щелкнув левой кнопкой мыши рядом с оранжевой точкой (тип строки) и отпустив ее в области графика.
Вы увидите такое же меню для выбора модулей, но теперь оно зависит от типа ввода, который модуль Debug может использовать для этой конкретной части модуля. Найдите String и нажмите Enter. Теперь этот блок подключен. Отсюда вам нужно будет ввести предложение в пустое поле. Я скажу «Привет, мир». не очень креативно, но это сработает.
После того, как вы напечатали это, нажмите кнопку воспроизведения в Unity, и вы увидите сообщение, появившееся в нижнем левом углу редактора Unity. Он будет отображаться белым цветом, и если вы нажмете на сообщение, вы откроете консоль, чтобы увидеть, что это сообщение появилось только один раз. Поскольку это было прикреплено к событию Start, при нажатии кнопки воспроизведения будет отображаться только одно сообщение.
Если мы прикрепим это к событию Update, оно будет обновляться несколько раз в секунду, что приведет к появлению в консоли сотен повторяющихся сообщений.
Обнаружение объектов
Для обнаружения объектов нам понадобится пара вещей: твердое тело и коллайдер. Если два объекта сталкиваются друг с другом, это называется столкновением, и мы можем обнаружить столкновения с помощью модуля OnCollisionEnter.
Оба эти объекта должны иметь какой-либо компонент коллайдера, чтобы обнаруживать друг друга, и по крайней мере один из них должен иметь твердое тело.
Мы продемонстрируем это, используя мяч, отскакивающий от пола. Игровой объект-сфера имеет твердое тело, коллайдер и упругий физический материал, чтобы упростить отскок.
При ударе о землю я также хочу запустить мультяшное кольцо дыма, чтобы имитировать пыль от удара.
Нам нужен мяч, чтобы обнаружить столкновение с землей, а дымовое кольцо будет системой частиц, которая будет находиться на земле в той точке, где мяч упадет на землю. В идеале дымовое кольцо двигалось бы вместе со сферой и играло в точке удара, но для простоты мы сохраняем его на месте.
Поскольку эффект частиц не привязан непосредственно к сфере, нам понадобится переменная специально для воспроизведения системы частиц дыма. Чтобы воспроизвести систему частиц, мы будем использовать модуль Particle System Play, который будет прикреплен к OnCollisionEnter. Продолжение сделаю, если будет интерес к статье...