交互
一、Gaze
gaze位置始终在屏幕中心点,也就是(0,0)。它是一个二维物体,上面有碰撞体检测。会根据碰撞的深度,通过shader改变显示图标。配合手机按键,可以实现选中功能,进行交互。GazeEvent Demo主要介绍Gaze和Controller交互系统。Gaze通常是在平面的正中间,通过头的转动控制交互,当连接对应的手柄后,手柄控制Gaze在平面内的位置。
- 选择Assets/stARkit/Lenovo.stARkit.SDK/Tutorial/GazeEvent/GazeEventDemo,依照上面的步骤出一个应用。
.png)
- 默认是事件系统是使用手柄的,可以在Scene中的EventCamera上挂的StARkitEventSystem上修改。
.png)
- 将Build的应用安装到指定设备上,并运行。
- 程序运行起来后,会看到正前方有3列UI。
- Interactive(可交互) : 这一列组件是可以Gaze交互的,最下方的方块也是可交互的,可以和最后一列进行对比找到其中的规律。和UGUI交互的条件是Canvas必须设置为WorldSpace,EventCamera设置为挂有StARkitEventSystem脚本的相机。3D物体的交互必须有碰撞体,且有挂有继承了Ipointer事件系统的组件或脚本。
- Focus&Disable(全局监听Focus和关闭Gaze) : 这一列是监听了Gaze的全局事件,注册事件之后,当Gaze的交互物体发生改变时或者在交互物上移动时都会收到消息,继承IstARkitFocusChangedHandler。按钮DisableGaze是动态关闭Gaze交互功能。中间的Controller按钮是当有手柄连接时切换方向键控制和3dof控制的。
- NotInteractive(不可交互) : 这一栏是不可交互的,主要是用来和可交互对比的。
.png)
INFO
和UGUI交互的条件是Canvas必须设置为WorldSpace,EventCamera设置为挂有StARkitEventSystem脚本的相机。和3D物体交互则物体必须有碰撞体且挂有实现了Ipointer事件的脚本
二、Controller
controller模式支持手机屏的点击事件,包括手机屏虚拟按键点击事件以及手机屏空白处点击事件。 controller交互和gaze交互的模式切换,需要从手机端controller发送控制信息,SDK不支持主动切换模式。交互模式信息可以从以下接口获取:
status value: 0 gaze mode
status value: 1 controller mode
/// <summary>
/// 手柄连接状态回调
/// </summary>
/// <param name="status"></param>
[AOT.MonoPInvokeCallback(typeof(System.Action<EControllerDataType>))]
private static void ControllerStatusCB(EControllerStatus status)
(Assets\stARkit\Lenovo.stARkit.Toolkit\Controller\StARkitHandController.cs)
三、手机按键
参考starkitKeyInput.cs实现现有按键的回调。按键支持头端按键(ok键、back键、power键)和手机触摸屏虚拟按键 (recenter键)。以下为判断ok键是否按下的接口代码。
/// <summary>
/// 确认键按下
/// </summary>
/// <returns></returns>
public static bool OkDown()