Общая схема работы

Стандарт взаимодействия аватара обеспечивает механизм взаимодействия аватара со взаимодействуемыми объектами и схематично представлен ниже:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4ee66628-1ccb-4050-a27b-15c6e9fc647d/Untitled.png

Как видно из схемы, стандарт состоит из двух основных компонентов: InteractionSenderController и InteractionReceiverController. Первый добавляется на аватара и инициирует взаимодействие, а второй добавляется на объект и в моменты фокусировки на нём и/или взаимодействия с ним запускает соответствующие события.

InteractionSenderController

Компонент InteractionSenderController выглядит следующим образом:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/502ebd48-3516-48af-a53c-f1f60c0a4396/Untitled.png

Параметр Interact Button хранит имя элемента ввода типа Button в компоненте AvatarOverallInput и интерпретирует его как кнопку взаимодействия. Параметр Ray Origin хранит ссылку на объект, положение которого будет являться началом луча взаимодействия, который пускается по направлению обзора аватара. Длина луча взаимодействия и его толщина определяются параметрами Ray Length и Ray Thickness соответственно. Параметр Receiver отображает текущий взаимодействуемый объект, с которым пересекается луч взаимодействия данного компонента.

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

InteractionReceiverController

Компонент InteractionReceiverController выглядит следующим образом:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/20a43774-febf-4fe0-b0e8-a18e3a98be75/Untitled.png

События OnSenderFocused и OnSenderUnfocused отрабатывают в моменты фокусировки и расфокусировки аватара на данном объекте. При этом в качестве входного аргумента передаётся компонент InteractionSenderController, который спровоцировал данные события.

Событие OnInteractionActive отрабатывает когда на объекте сфокусирован хотя бы один аватар. Соответственно, OnInteractionInactive отрабатывает когда не осталось ни одного сфокусировавшегося аватара на данном объекте. Как правило, на данные события добавляют действия по визуализации интерактивности объекта, например меняют материал или параметры в шейдере подсветки.

Событие OnInteractionPerform отрабатывает когда сфокусировавшийся аватар нажал кнопку взаимодействия. При этом в качестве входного аргумента передаётся компонент InteractionSenderController, спровоцировавший данное событие.