暴风魔镜中的凝视
暴风魔镜也是一种VR设备,通过暴风的眼镜来体验VR的场景,通过眼镜我们也能够在场景中进行相关的交互,用眼镜进行的交互是凝视交互,我们只要在交互区域进行凝视,通过设定好的凝视时间之后,我们就能进行场景交互。
一、场景搭建
在场景中,我们可以通过眼镜的凝视功能去凝视物体,然后显示物体名字。要想在unity中运用暴风魔镜,要先下载暴风魔镜在unity中的SDK,在新建的场景中导入SDK,然后开始搭建场景,在场景中创建以下物体。其中Canvas为画布,Text是用来显示凝视到的物体的名字。MojingMain在MojingSDK文件夹中的Prefabs文件夹下的预制体,这是用来观看场景的摄像头。HeadCtrl是眼镜的光标,用来确定眼镜看到的位置点,它在Demo文件夹中的Prefabs文件夹下的预制体。red和blue分别为红蓝两个方块。
二、功能编写
搭完场景后,接下来就是对凝视功能的设置。其中Canvas的RanderMode设置为WorldSpace,EventCamera设置为MojingMain中的MainCamera。在EventSystem中添加脚本GazeInputModule,在red和blue两个方块上都加入凝视脚本UGuiCrossNodeBase。脚本中的Text就是画布上的Text,ClickTime为凝视的时间,Clickable为是否凝视点击,Grabable为是否抓取物体,ShowWaiting为是否显示凝视时的等待图标。
凝视脚本:
using UnityEngine;using UnityEngine.UI;using UnityEngine.SceneManagement;public class uGUICrossNodeBase : MonoBehaviour {[HideInInspector]public float HoverTime = 1f; //视线进入物体后1秒开始执行凝视public float ClickTime = 1.5f; //执行1.5秒的凝视public bool Clickable = true; //可以执行凝视事件public bool Grabable = true; //可以被抓取public bool ShowWaiting = true;//显示凝视等待光标public Text text; //文本信息private string ButtonName;//凝视的物体名字public virtual void SetSelect(bool bFlag) //视线点刚进入物体的事件{ButtonName = name;if (bFlag) { //进入物体text.text = "正在读取";}else { //离开物体text.text = "";}}public virtual void OnClick() //凝视物体的事件{ButtonName = name;text.text = ButtonName;}}
脚本的功能就是视线刚进入方块,显示正在读取的文本信息,1秒后执行开始凝视事件,凝视事件用时1.5秒,期间显示等待光标,执行完之后文本信息显示方块的名字。
三、凝视测试
运行程序,按住Alt键,移动鼠标会发现场景中的光标会随鼠标而移动。当光标移到红方块上是,显示正在读取信息,过一段时间后信息变为红方块的名字。当光标移到蓝方块上也和红方块一样,只是显示的信息为蓝方块的名字。如下图,左边为红方块的测试,右边为蓝方块的测试。