Интерфейсы обработки событий интерактивности
IUseStartInteractionAware
Достаточно реализовать любой из пары интерфейсов (IUseStartInteractionAware, IUseEndInteractionAware), чтобы объект можно было использовать.
OnUseStart вызывается при нажатии триггера контроллера или левой кнопки мыши. Принимает параметр типа UsingContext - ссылку на используемый контроллер, через которую можно получить ссылку на gameObject контроллера.
public interface IUseStartInteractionAware : IVarwinInputAware
{
void OnUseStart(UseInteractionContext context);
}
IUseEndInteractionAware
Достаточно реализовать любой из пары интерфейсов (IUseStartInteractionAware, IUseEndInteractionAware), чтобы объект можно было использовать.
OnUseEnd вызывается при отпускании триггера контроллера или левой кнопки мыши.
public interface IUseEndInteractionAware : IVarwinInputAware
{
void OnUseEnd(UseInteractionContext context);
}
IGrabStartInteractionAware
Достаточно реализовать любой из пары интерфейсов (IGrabStartInteractionAware, IGrabEndInteractionAware), чтобы объект можно было хватать и переносить.
Реализация данного интерфейса подразумевает, что объект можно перетаскивать.
OnGrabStart вызывается при нажатии захвата (grip) контроллера или правой кнопки мыши. Принимает параметр типа GrabbingContext - ссылку на используемый контроллер, через которую можно получить ссылку на gameObject контроллера.
public interface IGrabStartInteractionAware : IVarwinInputAware
{
void OnGrabStart(GrabInteractionContext context);
}
IGrabEndInteractionAware
Достаточно реализовать любой из пары интерфейсов (IGrabStartAware, IGrabEndAware), чтобы объект можно было хватать и переносить.
OnGrabEnd вызывается при отпускании захвата (grip) контроллера, или нажатии правой кнопки мыши (при условии, что объект уже находится в руке).
public interface IGrabEndInteractionAware : IVarwinInputAware
{
void OnGrabEnd(GrabInteractionContext context);
}
ITouchStartInteractionAware
Достаточно реализовать любой из пары интерфейсов (ITouchStartAware, ITouchEndAware), чтобы объект реагировал на касания.
OnTouchStart вызывается при вхождении контроллера в область объекта.
public interface ITouchStartInteractionAware : IVarwinInputAware
{
void OnTouchStart(TouchInteractionContext context);
}

ITouchEndInteractionAware
Достаточно реализовать любой из пары интерфейсов (ITouchStartAware, ITouchEndAware), чтобы объект реагировал на касания.
OnTouchEnd вызывается при выхождении контроллера из области объекта.
public interface ITouchEndInteractionAware : IVarwinInputAware
{
void OnTouchEnd(TouchInteractionContext context);
}
Дополнительные интерфейсы для взаимодействия с контроллерами
IGrabPointAware
Предоставляет методы, позволяющие получить transform точки объекта, к которой присоединяется контроллер (для левого и правого контроллера соответственно). Вызывается в момент присоединения объекта к контроллеру (on grab).
public interface IGrabPointAware
{
Transform GetLeftGrabPoint();
Transform GetRightGrabPoint();
}

IPointerClickInteractionAware
OnPointerClick вызывается при клике объекта лучом указки.
public interface IPointerClickInteractionAware : IVarwinInputAware
{
void OnPointerClick(PointerInteractionContext context);
}

IPointerInInteractionAware
OnPointerIn вызывается при входе луча указки в область объекта.
public interface IPointerInInteractionAware : IVarwinInputAware
{
void OnPointerIn(PointerInteractionContext context);
}
IPointerOutInteractionAware
OnPointerOut вызывается при выходе луча указки из области объекта.
public interface IPointerOutInteractionAware: IVarwinInputAware
{
void OnPointerOut(PointerInteractionContext context);
}
IPointerDownInteractionAware
OnPointerDown вызывается при нажатии клавиши на контроллере или мыши по объекту.
public interface IPointerDownInteractionAware : IVarwinInputAware
{
void OnPointerDown(PointerInteractionContext context);
}
IPointerUpInteractionAware
OnPointerDown вызывается при прекращении нажатия клавиши на контроллере или мыши по объекту.
public interface IPointerUpInteractionAware : IVarwinInputAware
{
void OnPointerUp(PointerInteractionContext context);
}
Дополнительная информация
В качестве аргумента в методах, описанных выше, интерфейсов используется тот или иной контекст.
Внутри каждого контекста содержатся данные о взаимодействии:
- InteractHand - GameObject руки, которая производит взаимодействие;
- Hand - тип взаимодействующей руки. Может принимать значения Left (для левой руки) и Right (для правой руки). Для платформ, на которых нет контроллеров (Desktop, NettleDesk, AR), в данной переменной всегда будет передаваться значение Right;
- ControllerSelf - внутренний класс Varwin, который определяет методы управления контроллером.

Если объект реализует оба типа взаимодействия (IPoiner[Action]InteractionAware и I[Action]InteractionAware), то приоритет будет отдаваться IPointer[Action]InteractionAware.
Например, если объект реализует IPointerDownInteractionAware и IUseStartInteractionAware, то при нажатии на объект будет вызван метод OnPointerDown(UIInteractionContext context) из интерфейса IPointerDownInteractionAware, а метод OnUseStart(UseInteractionContext context) будет проигнорирован.