交互方法理解
- 3种交互方式触发事件是一样的,移入游戏对象就会触发OnFocusEnter事件、移出触发OnFocusExit,点击操作分别触发OnPointerDown、OnPointerDragged、OnPointerClicked、OnPointerUp。
- 头部与眼睛都属于凝视交互,只能单独勾选一种。
- 手势交互优先级高于凝视交互,默认情况当手势交互出现在设备时,凝视交互将失效。
- 游戏对象绑定EyeTracking事件,当眼睛进入游戏对象就会触发事件,眼睛移入对象的同时近指针点击就会触发点击相关事件(远指针点击则不会触发,除非指针移入眼睛注视的对象,所以想使用眼睛交互就需要当满足一定条件禁时,禁止掉远指针)。
- 想要眼睛和远指针同时存在就需要考虑好交互规则。
眼睛凝视
- MRTK 提供EyeTracking脚本可直接挂在到游戏对象上,用户凝视会直接触发对应事件(头部凝视不会触发)。
- FaceUser脚本在EyeTracking Samples中提供的脚本,挂载到游戏对象上时,当用户凝视此对象触发凝视相关事件时,调用FaceUser公共函数Engage方法,游戏对象就会面向用户。凝视移出时调用DisEngage方法,游戏对象即恢复原先位置。
MRTK交互事件
void IMixedRealityFocusHandler.OnFocusEnter(FocusEventData eventData)
{
Debug.Log("OnFocusEnter")
material.color = color_OnHover
}
void IMixedRealityFocusHandler.OnFocusExit(FocusEventData eventData)
{
Debug.Log("OnFocusExit")
material.color = color_IdleState
}
void IMixedRealityPointerHandler.OnPointerDown(
MixedRealityPointerEventData eventData)
{
Debug.Log("OnPointerDown")
}
void IMixedRealityPointerHandler.OnPointerDragged(
MixedRealityPointerEventData eventData)
{ Debug.Log("OnPointerDragged")
void IMixedRealityPointerHandler.OnPointerClicked(MixedRealityPointerEventData eventData)
{
Debug.Log("OnPointerClicked")
material.color = color_OnSelect
}
public void OnPointerUp(MixedRealityPointerEventData eventData)
{
Debug.Log("OnPointerUp")
}
MRTK API
void Update()
{
PointerUtils.SetGazePointerBehavior(PointerBehavior.AlwaysOn);
PointerUtils.SetHandRayPointerBehavior(PointerBehavior.AlwaysOff, Handedness.Right);
PointerUtils.SetHandRayPointerBehavior(PointerBehavior.Default);
PointerUtils.SetHandRayPointerBehavior(PointerBehavior.AlwaysOn);
}
