Конечные автоматы, скрипты и примитивные сущности

Вызов

Постройте спаунер для Amazon Sumerian. Что такое производитель?

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

Решение

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

Шаг 0 - Создание сцены освещения по умолчанию

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

Шаг 1. Добавьте 3D-примитивы для прототипирования.

Используйте Create Entity, чтобы добавить три примитива. Расставляйте их так, как вам нравится.

Сущности будут использоваться следующим образом:

  • Коробка - отправит миру сообщение "старт".
  • Цилиндр - прослушивает сообщение «старт» и выполняет сценарий клонирования.
  • Сфера - объект, который нужно клонировать.

Популярные статьи AR VR:

1. Как XR может раскрыть познание

2. Oculus Go, Nintendo Switch виртуальной реальности

3. Мнение эксперта: 3 способа, которыми виртуальная реальность меняет обучение и развитие

Шаг 2 - Добавьте конечные автоматы

Для сущностей Box и Cylinder добавьте Component → State Machine.

Коробка - поведение при запуске

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

Если вы сейчас проиграете сцену, вы не увидите, чтобы в конечном автомате что-то происходило, так как переход происходит очень быстро. Если вы хотите увидеть конечный автомат в действии, вы можете добавить еще два состояния (дублировать существующие, чтобы сэкономить время) и переключаться между сообщениями «start» и «stop».

Состояние: нажмите

  • Действие: при нажатии / касании объекта

Состояние: Начало выпуска

  • Действие: испустить начало
  • Действие: переход

Цилиндр - поведение клона

Clone Behavior похож на Box (он тоже циклический), однако он делает гораздо больше. Вместо того, чтобы отвечать на событие click, он слушает сообщение "start", чтобы узнать, когда выполнить скрипт клонирования. Обратите внимание, что сценарий может возвращать либо успех, либо сбой. В этом случае я только перехожу обратно в режим "Прослушивание" при успехе.

Состояние: слушайте

  • Действие: слушайте

Состояние: клонировать

  • Выполнить сценарий

Когда вы добавляете действие «Выполнить скрипт», вы создаете новый скрипт, нажимая значок +, а затем редактируете скрипт (значок карандаша).

При выполнении сценария из конечного автомата необходимы четыре функции:

setup - прямо как звучит

  • Здесь мы создаем массив для хранения наших клонов

enter - где происходит основная логика

  • используйте встроенную функцию sumerian.EntityUtils.clone для создания клона сущности из args.entity
  • добавить клон в массив (чтобы мы могли ссылаться на клоны позже в cleanup
  • дайте клону уникальное имя и случайный цвет
  • присвойте клону тег clone * это будет важно позже
  • добавить клон в мир и перейти успех

exit - нам нечего делать, когда государство выходит

cleanup - убрать клонов из мира

Еще кое-что…

Скрипт Clone имеет один параметр, который можно установить во время разработки (то есть в редакторе). Перетащите объект Sphere (объект, который нужно клонировать) на цель перетаскивания с надписью Entity to clone. В сценарии мы ссылаемся на параметр, используя args.

Шаг 3 - Добавить сценарий Sphere

Если вы сейчас войдете в режим игры и нажмете на поле, то ничего особенного не увидите. Клонированная сфера (со случайным цветом) добавляется в мир (вы можете проверить, открыв консоль браузера), однако, поскольку она находится в том же положении, что и оригинал, ее трудно увидеть. У нас действительно происходит интересный рендеринг, продолжайте нажимать на Box, чтобы увидеть полосатую Сферу (ы).

Чтобы мы могли видеть, что клоны действительно существуют в мире, мы добавим в Сферу специальный скрипт. Этот скрипт будет перемещать (переводить) клонированные сферы во время каждого fixedUpdate события. Оригинальная красная сфера останется на месте, даже если к ней прикреплен скрипт перемещения. Только клонированные сферы имеют тег clone (строка 23).

Сценарий Move имеет один параметр, называемый translation, который позволяет экспериментировать во время разработки.

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

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

setup Sphere
Clone created: 1
setup Clone 1
Clone created: 2
setup Clone 2
removing clone: Clone 1
removing clone: Clone 2

Конец