基于Unity3D的虚拟校园漫游系统及其关键技术研究
2019-10-08尹大伟张熙若李欢欢马恒锐孟祥锐
尹大伟 张熙若 李欢欢 马恒锐 孟祥锐
摘 要:为扩大招生,学校需要更好展示自身风采的平台,让学生更好地了解校园内部环境,而传统的虚拟校园漫游系统,主要是利用2D动画、照片、图片和文字向用户展示校园环境,系统缺乏互动性、沉浸感和景深效果,无法使用户产生身临其境的感觉。针对以上问题,本文采用3D虚拟现实技术,设计、开发了一个以用户为中心,富娱乐性、交互性和沉浸感的Web访问的交互式漫游系统。
关键词:虚拟现实;虚拟校园;Unity3D;游戏引擎
中图分类号:TP391.9 文献标识码:A
Abstract:In order to attract more applicants,schools need to better display their own styles so that students can better understand the campus internal environment.Traditional virtual campus roaming system presents the environment to users through 2D animation,360° environment photos,pictures and texts,which lacks interactivity,immersion perception and depth of field and can't generate immersive feelings.Aiming at the above problems,this paper uses 3D virtual reality technologies,designs and develops a user-centered virtual campus roaming system with entertainment,interactivity and immersion.Users can visit freely or automatically to the campus,click the given interactive objects and gain the information they are interested in.
Keywords:virtual reality;virtual campus;Unity3D;game engine
1 引言(Introduction)
虛拟现实(Virtual Reality),简称VR技术,是利用计算机产生一个三维的虚拟世界,为用户提供视、听、触觉等感官的模拟,使用户如同身临其境一般可以即时且没有限制的观察三维空间中的事物[1]。虚拟现实系统是联系虚拟世界、真实世界和用户之间的纽带,当用户在真实世界的状态发生改变,通过虚拟现实系统,将其传送到虚拟世界中,虚拟世界就会与用户之间产生互动,如同真实世界一般。
虚拟校园漫游系统是虚拟现实技术在数字化校园中的具体应用,是校园环境的模拟和再现[2]。首先利用三维建模工具3DMax,创建教学大楼、图书馆、食堂、宿舍楼、体育场等主要建筑物的3D模型;接下来利用Unity3D引擎和交互脚本,使用户可以做出与现实世界相同的动作,体现了系统的交互性和真实性。该系统将成为了解学校的一个窗口,对于展示学校整体形象、提高生源质量和为在校新生导航将起到重要作用[3]。在其基础上,还可以建立虚拟大学,提供相应的虚拟课堂、在线答疑、虚拟实验等服务。
Unity3D是一个能在多平台输出3D游戏开发工具和游戏引擎套件,其中包括了图形、音频、物理和网络等诸多功能模块,并提供了一个整合以上功能的、强大的图形化编辑器。其编辑器运行在Windows和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、Windows phone 8和Android平台[4]。Unity3D被广泛应用于虚拟场景的模拟(博物馆、购物中心等)、驾驶模拟(飞机、轮船、汽车等)、游戏娱乐软件、医疗、教育等诸多领域。
2 系统的设计与实现(Design and implementation of the system)
2.1 系统的开发流程
虚拟校园漫游系统的开发遵循软件开发的基本流程,包括分析、设计、开发、测试、修改,重复上述步骤逐步实现系统所规划的功能[5]。其开发流程大致分为九个步骤:校园环境测量、绘制校园草图、创建主要建筑物模型、收集素材、为模型添加纹理和材质、将模型导入Unity3D引擎、录制视频和音频文件、编辑互动脚本、生成虚拟校园。具体的开发流程如图1所示。
首先测量真实的校园环境,并按等比例绘制校园环境的草图。然后利用三维建模工具3DMax,创建地形、主要建筑物和环境模型,并尽量保证与真实环境的比例相同。接下来根据环境的特点,为三维模型贴上逼真的素材,构建完整的校园场景。最后将场景导入Unity3D引擎,编辑互动脚本,将静态场景连接到Unity3D引擎,实现角色和场景间的互动。
2.2 系统的设计目标
虚拟校园要为用户提供尽可能真实的校园模拟环境,并实现角色与场景间的互动,其具体设计目标如下:
(1)系统具有友善的用户界面,便于用户通过浏览器访问。
(2)构建校园主要建筑物高精度的全景模型。用户可以通过鼠标来放大、缩小和旋转建筑模型,并从任意角度观察。
(3)系统支持两种游览方式:自由游览和自动游览。自由游览是指用户以第一人称视角,通过键盘和鼠标控制角色在虚拟校园中随意参观、游览。自动游览是指用户按事先设定好的人称视角,沿固定线路参观、游览校园。
(4)媒体展示。虚拟校园中可以嵌入Flash、视频、音频、文本等多媒体信息,当用户到达交互区域或通过鼠标点击交互对象,能够在弹出窗口中播放相关的多媒体信息。
(5)快速地理信息查詢。该功能可以查询校园中主要建筑物的位置信息,并可即时的将用户角色移动到该建筑物附近。
2.3 系统的实现
依据上述的开发流程,采用3DMax为场景建模工具,Unity3D为系统开发平台,设计开发了交互式的虚拟校园漫游系统。用户可以通过浏览器访问虚拟校园,体验逼真的校园环境,并可通过导航菜单选择自由游览、自动游览或地图导航。在漫游过程中,用户可以通过键盘控制角色的运动,使用鼠标点击建筑物可以了解相关的环境信息。系统的运行效果如图2和图3所示。
3 系统开发中的关键技术(Key technologies in the system development)
3.1 模型优化
模型是虚拟校园的基础,模型的精细程度会直接影响到系统的仿真效果,但过多的复杂模型同样会增加系统的负担,并对系统的交互性和实时性产生不良影响。为保证仿真效果和系统的运行性能,我们在创建模型时尽可能地使用标准几何体;建筑物表面的细节、草坪和花卉采用纹理贴图;树木和高大的植物采用广告牌技术;在模型的构建中还考虑到对模型的优化,通过采用删除不可见面、减少材质数量、压缩贴图等优化方法,简化了模型,减少了模型的大小[5]。优化前后效果图如图4和图5所示。
3.2 碰撞检测技术
碰撞检测技术是三维场景中实现交互的重要机制。Unity3D引擎的碰撞检测机制分为两类:触发和碰撞[6]。采用触发方式,当碰撞发生时不会产生任何物理现象,该机制用于处理没有产生任何物理现象的碰撞。采用碰撞方式,当碰撞发生时会产生相应的物理现象,例如改变物体的位置、爆炸等等。漫游过程中,使用触发器实现门的自动开关,使用碰撞器处理角色、树木和建筑物之间的碰撞。
3.3 虚拟交互
Unity3D引擎中,虚拟交互的核心是编辑实现交互功能的脚本,通过将交互脚本赋予静态的三维模型,赋予其与用户交互的能力。系统中的虚拟交互主要包括自由游览、自动游览和信息交互。
3.3.1 自由游览
自由游览是指用户以第一人称视角参观、游览校园。游览过程中用户通过W、S、A、D键控制角色的前进、后退、左、右移动,使用鼠标改变角色的观察视角[7]。其部分核心代码如下所示:
if(Input.GetKey(KeyCode.W)){
z+=m_Speed*Time.deltaTime;
}
if(Input.GetKey(KeyCode.S)){
z-=m_Speed*Time.deltaTime;
}
if(Input.GetKey(KeyCode.A)){
x-=m_Speed*Time.deltaTime;
}
if(Input.GetKey(KeyCode.D)){
x+=m_Speed*Time.deltaTime;
}
transform.Translate(new Vector3(x,y,z));
3.3.2 自动游览
自动游览是指用户以规定的视角,沿固定的线路参观、游览校园。游览过程中,可通过鼠标改变观察视角。自动游览功能的实现步骤如下。
(1)创建多个cube作为漫游的导航点,将其均命名为WandarPoint,并用WandarPoint标记这些导航点;禁用其网格渲染器,并删除碰撞器;将导航点均匀地设置在漫游路径上,确保每个路口都有导航点,任何相邻的导航点间均没有障碍物,可以直接到达。
(2)编辑自动浏览脚本,将脚本赋予角色。脚本中的操作包含两部分:其一是按由近及远的次序存储所有导航点的位置信息,以及用户的起始位置和运动方向;其二是按导航点的次序运动,最终抵达目标点。
导航数据初始化在Start方法中实现,其部分核心代码如下所示:
path=GameObject.FindGameObjectsWithTag("WandarPoint");
Array.Sort(path,(x,y)=>{returnx.gameObject.name.CompareTo(y.gameObject.name);});
transform.position=path [0].transform.position;
transform.forward=path [Index].transform.position-transform.position;
自动漫游在Update方法中实现,其部分核心代码如下所示:
if(Vector3.Distance(path [Index].transform.position,transform.position)<0.1f){
if(Index!=path.Length-1){
Index++;}
if(Vector3.Distance(path[path.Length-1].transform.position,transform.position)<0.1f){
transform.position=path [path.Length-1].transform.position;
return;}
transform.forward=path Index].transform.position-transform.position;}
transform.Translate(Vector3.forward*5*Time.deltaTime,Space.Self);
3.3.3 信息交互
系統的信息交互应用了Unity3D引擎提供的3D拾取技术。3D拾取技术的基本思想是,从用户位置向鼠标点击位置发射一条射向3D世界的射线,与射线相交的第一个对象,为被选中对象[8]。获取选中对象后,可以以动画、音频、图片、文字等形式向用户展示对象的相关信息。利用信息交互功能,用户可在漫游时方便快捷地查询周围环境的信息。信息交互的部分核心代码如下所示:
Ray ray=Camera.mainCamera.ScreenPointToRay
(Input.mousePosition);
if (Physics.Raycast(ray,out hit,100)){
if (hit.transform.gameObject.name=="Library") {
……// event handling
}
}
4 结论(Conclusion)
本文设计、开发基于Unity3D引擎的交互式虚拟校园漫游系统,并利用Unity3D的多平台部署功能,将其发布到Web平台上。系统为用户提供了逼真的校园环境,且具备良好的实时性和交互性。文中还讨论了在虚拟校园漫游系统开发中所涉及的几个关键技术,并给出了相应的解决方案。文中所涉及的技术同样可应用于电子、游戏、医学、教育等虚拟现实和仿真领域。
参考文献(References)
[1] 肖建良,张程,李阳.基于Unity3D的室内漫游系统[J].电子设计工程,2016,19:54-56.
[2] 朱惠娟.基于Unity3D的虚拟漫游系统[J].计算机系统用,2012,21(10):36-38.
[3] 李远鑫,蒋海鸥,徐亦飞,等.基于Web3D的交互式虚拟社区[J].计算机工程,2011,37(11):289-290.
[4] 刘海川,王小鹏,王磊.虚拟校园模型构建及优化[J].电子科技,2010,11:1-3.
[5] 张明明.基于Unity3D虚拟校园漫游的研究与实现[D].昆明:云南大学,2014:35-36.
[6] 李在贤.Unity5权威讲解[M].北京:人民邮电出版社,2016:15-16.
[7] 王星捷,李春花.基于Unity3D平台的三维虚拟城市研究与应用[J].计算机技术与发展,2013,23(4):241-244.
[8] 黄涛.基于Unity3D的虚拟校园漫游系统的研究和实现[D].桂林:广西师范大学,2014:39-40.
作者简介:
尹大伟(1985-),男,硕士,副教授.研究领域:现代思想政治教育理论与方法,多媒体技术应用.
张熙若(1997-),男,本科生.研究领域:软件开发.
李欢欢(1998-),女,本科生.研究领域:虚拟现实.
马恒锐(1998-),男,本科生.研究领域:网络安全.
孟祥锐(1998-),男,本科生.研究领域:图像处理.