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. Он позволяет задать точки к которым будет прикрепляться контроллер (для правой и левой рук соответственно) в момент захвата объекта