Интерфейсы обработки событий интерактивности
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)
будет проигнорирован.