周鹏程
摘要:三维虚拟数字校园系统采用了Unity引擎作为开发工具,Unity主要用于开发丰富的2D、3D、VR及AR的交互式内容,主要使用C#作为开发语言,在系统设计过程中主要用到了VR眼镜的准心交互,其涉及的关键技术是射线碰撞原理。
关键词:Unity3D;虚拟数字校园系统;准心交互;射线碰撞
中图分类号:G423.07 文献标识码:A 文章编号:1009-3044(2018)07-0183-02
Abstract:The 3D virtual digital campus system uses the Unity3D engine as a development platform, Unity3D is mainly used for the development of interactive content in 2D or 3D, VR and AR. The development mainly use C# as a development language, in the process of system design mainly uses VR glasses quasi heart interaction, the key technology is ray collision principle.
Key words:virtual campus system;Unity3D development;Vrinteractive;crosshairinteraction;ray collision
1 國内外相关研究动态
VR虚拟现实技术已成为当今较为追捧的科技,从阿里巴巴的Buy+,到Google的VR眼镜,互联网+正逐步细分出VR+、大数据+等等,作为当今开发VR技术的主流引擎Unity和UE4,Unity更受大众的喜爱。Unity 科技公司提供的开发平台,用于开发丰富的2D、3D、VR及AR交互式内容。Unity强大的图形引擎和功能全面的编辑器能快速地实现用户的创意,并将所需表达的内容部署到几乎所有媒体与设备上。Unity可发布到PC平台、主机、网页、移动设备、家庭娱乐系统、嵌入式系统或头戴显示器等多种平台。Unity提供的工具与资源包括:Unity Asset Store资源商店、Unity Cloud Build云构建、Unity Analytics分析、Unity Ads广告、Unity Certification认证考试以及Unity Everyplay等。
三维虚拟数字校园系统的开发采用了Unity引擎,体验者可以通过动态、交互的运用全方位地为用户展示校园各种信息,通过3D影像动态交互,体验者会产生身临其境的感觉。
2 三维虚拟数字校园交互设计
在设计三维虚拟数字校园交互系统时,所需的载体是基于三星Galaxys 6的智能手机,该型号手机支持Gear VR眼镜,将两者相连后,手机会提示安装Gear VR相关插件和对应应用程序,将三星手机的VR眼镜证书与Unity关联打包后,将生成的APK导入到手机,即可在Gear VR眼镜上观看。在手机开始界面会出现一个红色圆点,这就是注视的准心,体验者双眼瞄准准心3秒,会出现一个旋转的动态注视条,3秒后即可对注视的物体产生交互,如图1所示。
VR眼镜交互设计的关键技术在于准心射线的交互设计。首先在场景中创建一个空物体GameObject,再创建一台主摄像机作为空物体下的子物体,将摄像机镜头Field of View视野设置为38。当用户佩戴VR眼镜后,进入三维虚拟数字校园界面,眼睛注视圆点准心,系统即认为是发射了一条射线,这条射线在运行时,每一帧都会去发射Ray,获得用户看向的物体的信息,射线的碰撞信息RayCastHit,向它发送了激活方法的信息(sendMessage)。当用户漫游到校碑旁边时,准心瞄准校碑,系统会播放学校发展沿革,如图2所示。播放完后,会弹出箭头示意用户漫游到教学楼,如图3所示。
准心交互的射线设计原理如下:
usingUnityEngine;
usingSystem.Collections;
usingUnityEngine.UI;
usingUnityEngine.VR;
public class VRviewToActive : MonoBehaviour {
public Ray myRay; //新建一个射线类的对象
public RaycastHit Hit; //新建一个射线碰撞信息类,用于存储射线返回来的信息
public Camera myCamera; //我的相机
publicLayerMaskLayerMask; //层数据
public GameObjectNowObj;//现在注视的物体
public bool StartCountTime = false;//这个字段用来控制计时器的打开和关闭
public float NowTime = 0; //计时器开始的时间节点
public float NeedTime = 3;//需要停留3秒,也就是计时器需要计时3秒
publicGameObjectTagImage;
void Update() {
float value = NowTime / NeedTime;
TagImage.transform.GetComponent
see();//发射射线并控制计时器的方法
CountTime();//我们的计时器方法,同时它也是控制信息发送的地方}
发射射线并控制计时器的方法,设定为MyRay为发射射线,把这条射线碰撞到的信息输出(out)给Hit,设定发射距离最大为1000m,使用layerMask中的遮罩剔除不需要检测的层, 然后发射射线并检测。
void see() {myRay = new Ray(myCamera.transform.position,myCamera.transform.forward);
//给射线填充一个新的射线(从我的相机位置开始,向相机的前方发射)
if (Physics.Raycast(myRay, out Hit, 1000, LayerMask))
{ if (Hit.collider.gameObject != null) //如果碰到了物体
{ NowObj = Hit.collider.gameObject; //把碰到的物體放入我们的目标中
StartCountTime = true; //打开计时器} }
else {//没有碰到物体
NowObj = null; //清空当前目标
StartCountTime = false; //计时器关闭} }
如果计时器没有开启,计时归零,跳出方法,不再往下执行。如果目标里有物体,开始计时,NowTime是一开始为0的Float值, 每一帧自身加上系统这一帧运行花费的时间,假如一秒钟运行了60帧,那么这个时间就是1/60秒,如果计时器累积时间超过规定的时间,表示计时完毕,可以执行规定的事件。
voidCountTime()
{ if (StartCountTime == false)
{ NowTime = 0;//计时归零
return; //跳出方法,不再往下执行}
if (NowObj != null) //如果目标里有物体
{ NowTime = NowTime + Time.deltaTime; //开始计时
if (NowTime>= NeedTime) //计时完毕
{ StartCountTime = false; //停止计时
NowTime = 0; //计时器归零
NowObj.SendMessage("StartActive", SendMessageOptions.DontRequireReceiver); } }
//发送信息给我们对象物体,尝试激活目标方法
else { NowObj = null; //停止计时
NowTime = 0; //计时器归零}}}
3 结束语
三维虚拟数字校园系统的设计涵盖了粒子特效、三维模型、动画、材质与贴图、寻路技术、系统优化等,是个跨专业较强的平台,要设计出完整而交互界面友好美观的数字校园交互系统还需要解决一系列问题,同时也能为各种数字园区的开发提供相关的VR技术。
参考文献:
[1] 张敏.基于Unity 3D的游戏的设计与实现[J].计算机光盘软件与应用,2014(18):269-270.
[2] 张敏.基于Unity 3D的三维地形建模[J].湖南工业职业技术学院学报,2014(6):16-18.
[3] 朱惠娟.基于Unity3D的虚拟漫游系统[J].计算机系统应用,2012(10):36-39+65.