Взаимодействие с контроллерами
Varwin SDK предоставляет компонент, позволяющий легко настраивать взаимодействие контроллеров с Varwin объектом
Для этого необходимо добавить на Varwin объект компонент Interactable Object Behaviour
В инспекторе устанавливаются желаемые настройки взаимодействия, а также могут быть добавлены обработчики событий
- Is Grabbable - объект можно брать в руки и перетаскивать
- Is Usable - объект можно использовать
- Is Touchable - контур объекта подсвечивается при нахождении контроллера в области объекта
InteractableObjectBehaviour реализует публичные интерфейсы, необходимые для обработки событий ввода с контроллера
- IUseStartAware
- IUseEndAware
- IGrabStartAware
- IGrabEndAware
- ITouchStartAware
- ITouchEndAware
Эти интерфейсы могут быть реализованы разработчиком самостоятельно при написании скриптов для Varwin объектов
IUseStartAware
Достаточно реализовать любой из пары интерфейсов (IUseStartAware
, IUseEndAware
), чтобы объект можно было использовать
public interface IUseStartAware : IVarwinInputAware { void OnUseStart(UsingContext context); }
OnUseStart
вызывается при нажатии триггера контроллера или левой кнопки мыши. Принимает параметр типа UsingContext
- ссылка на используемый контроллер, через нее можно получить ссылку на gameObject контроллера
IUseEndAware
Достаточно реализовать любой из пары интерфейсов (IUseStartAware
, IUseEndAware
), чтобы объект можно было использовать
public interface IUseEndAware : IVarwinInputAware { void OnUseEnd(); }
OnUseEnd
вызывается при отпускании триггера контроллера или левой кнопки мыши
IGrabStartAware
Достаточно реализовать любой из пары интерфейсов (IGrabStartAware
, IGrabEndAware
), чтобы объект можно было хватать и переносить
Реализация данного интерфейса подразумевает, что объект можно перетаскивать
public interface IGrabStartAware : IVarwinInputAware { void OnGrabStart(GrabingContext context); }
OnGrabStart
вызывается при нажатии захвата (grip) контроллера или правой кнопки мыши. Принимает параметр типа GrabbingContext
- ссылка на используемый контроллер, через нее можно получить ссылку на gameObject контроллера
IGrabEndAware
Достаточно реализовать любой из пары интерфейсов (IGrabStartAware
, IGrabEndAware
), чтобы объект можно было хватать и переносить
public interface IGrabEndAware : IVarwinInputAware { void OnGrabEnd(); }
OnGrabEnd
вызывается при отпускании захвата (grip) контроллера или нажатии правой кнопки мыши (при условии, что объект уже в руке)
ITouchStartAware
Достаточно реализовать любой из пары интерфейсов (ITouchStartAware
, ITouchEndAware
), чтобы объект реагировал на касания
public interface ITouchStartAware : IVarwinInputAware { void OnTouchStart(); }
OnTouchStart
вызывается при вхождении контроллера в область объекта
ITouchEndAware
Достаточно реализовать любой из пары интерфейсов (ITouchStartAware
, ITouchEndAware
), чтобы объект реагировал на касания
public interface ITouchEndAware : IVarwinInputAware { void OnTouchEnd(); }
OnTouchEnd
вызывается при выхождении контроллера из области объекта
Другие интерфейсы для взаимодействия с контроллерами
IGrabPointAware
Предоставляет методы, позволяющие получить transform точки объекта, к которой присоединяется контроллер (для левого и правого контроллера соответственно). Вызывается в момент присоединения объекта к контроллеру (on grab)
public interface IGrabPointAware { Transform GetLeftGrabPoint(); Transform GetRightGrabPoint(); }
IPointerClickAware
public interface IPointerClickAware : IVarwinInputAware { void OnPointerClick(); }
OnPointerClick
вызывается при клике объекта лучом указки
IPointerInAware
public interface IPointerInAware : IVarwinInputAware { void OnPointerIn(); }
OnPointerIn
вызывается при входе луча указки в область объекта
IPointerOutAware
public interface IPointerOutAware : IVarwinInputAware { void OnPointerOut(); }
OnPointerOut
вызывается при выходе луча указки из области объекта
Grab Settings Component
Если необходимо, чтобы объект ложился в руку определенным образом, можно воспользоваться компонентом Grab Settings. Он позволяет задать точки к которым будет прикрепляться контроллер (для правой и левой рук соответственно) в момент захвата объекта