Varwin SDK предоставляет компонент, позволяющий легко настраивать взаимодействие контроллеров с Varwin объектом

Для этого необходимо добавить на Varwin объект компонент Interactable Object Behaviour

В инспекторе устанавливаются желаемые настройки взаимодействия, а также могут быть добавлены обработчики событий

  • Is Grabbable - объект можно брать в руки и перетаскивать
  • Is Usable - объект можно использовать
  • Is Touchable - контур объекта подсвечивается при нахождении контроллера в области объекта

InteractableObjectBehaviour реализует публичные интерфейсы, необходимые для обработки событий ввода с контроллера

  • IUseStartAware
  • IUseEndAware
  • IGrabStartAware
  • IGrabEndAware
  • ITouchStartAware
  • ITouchEndAware

Эти интерфейсы могут быть реализованы разработчиком самостоятельно при написании скриптов для Varwin объектов

IUseStartAwareLink to IUseStartAware

Достаточно реализовать любой из пары интерфейсов (IUseStartAware, IUseEndAware), чтобы объект можно было использовать

public interface IUseStartAware : IVarwinInputAware
{
    void OnUseStart(UsingContext context);
}

OnUseStart вызывается при нажатии триггера контроллера или левой кнопки мыши. Принимает параметр типа UsingContext - ссылка на используемый контроллер, через нее можно получить ссылку на gameObject контроллера

IUseEndAwareLink to IUseEndAware

Достаточно реализовать любой из пары интерфейсов (IUseStartAware, IUseEndAware), чтобы объект можно было использовать

public interface IUseEndAware : IVarwinInputAware
{
    void OnUseEnd();
}

OnUseEnd вызывается при отпускании триггера контроллера или левой кнопки мыши

IGrabStartAwareLink to IGrabStartAware

Достаточно реализовать любой из пары интерфейсов (IGrabStartAware, IGrabEndAware), чтобы объект можно было хватать и переносить

Реализация данного интерфейса подразумевает, что объект можно перетаскивать

public interface IGrabStartAware : IVarwinInputAware
{
    void OnGrabStart(GrabingContext context);
}

OnGrabStart вызывается при нажатии захвата (grip) контроллера или правой кнопки мыши. Принимает параметр типа GrabbingContext - ссылка на используемый контроллер, через нее можно получить ссылку на gameObject контроллера

IGrabEndAwareLink to IGrabEndAware

Достаточно реализовать любой из пары интерфейсов (IGrabStartAware, IGrabEndAware), чтобы объект можно было хватать и переносить

public interface IGrabEndAware : IVarwinInputAware
{
    void OnGrabEnd();
}

OnGrabEnd вызывается при отпускании захвата (grip) контроллера или нажатии правой кнопки мыши (при условии, что объект уже в руке)

ITouchStartAwareLink to ITouchStartAware

Достаточно реализовать любой из пары интерфейсов (ITouchStartAware, ITouchEndAware), чтобы объект реагировал на касания

public interface ITouchStartAware : IVarwinInputAware
{
    void OnTouchStart();
}

OnTouchStart вызывается при вхождении контроллера в область объекта

ITouchEndAwareLink to ITouchEndAware

Достаточно реализовать любой из пары интерфейсов (ITouchStartAware, ITouchEndAware), чтобы объект реагировал на касания

public interface ITouchEndAware : IVarwinInputAware
{
    void OnTouchEnd();
}

OnTouchEnd вызывается при выхождении контроллера из области объекта

Другие интерфейсы для взаимодействия с контроллерамиLink to Другие интерфейсы для взаимодействия с контроллерами

IGrabPointAwareLink to IGrabPointAware

Предоставляет методы, позволяющие получить transform точки объекта, к которой присоединяется контроллер (для левого и правого контроллера соответственно). Вызывается в момент присоединения объекта к контроллеру (on grab)

public interface IGrabPointAware
{
    Transform GetLeftGrabPoint();
    Transform GetRightGrabPoint();
}

IPointerClickAwareLink to IPointerClickAware

public interface IPointerClickAware : IVarwinInputAware
{
    void OnPointerClick();
}

OnPointerClick вызывается при клике объекта лучом указки

IPointerInAwareLink to IPointerInAware

public interface IPointerInAware : IVarwinInputAware
{
    void OnPointerIn();
}

OnPointerIn вызывается при входе луча указки в область объекта

IPointerOutAwareLink to IPointerOutAware

public interface IPointerOutAware : IVarwinInputAware
{
    void OnPointerOut();
}

OnPointerOut вызывается при выходе луча указки из области объекта

Grab Settings ComponentLink to Grab Settings Component

Если необходимо, чтобы объект ложился в руку определенным образом, можно воспользоваться компонентом Grab Settings. Он позволяет задать точки к которым будет прикрепляться контроллер (для правой и левой рук соответственно) в момент захвата объекта