肖建良,张程,李阳
(大连理工大学 城市学院,辽宁 大连116600)
基于Unity3D的室内漫游系统
肖建良,张程,李阳
(大连理工大学 城市学院,辽宁 大连116600)
Unity3D是近几年非常流行的一个3D游戏开发引擎,它的特点是跨平台能力强,移植便捷,3D图形性能出众。文中以室内虚拟3D场景为开发目标,利用Unity3D游戏引擎,结合C#脚本语言开发了室内漫游系统。系统为用户提供了近乎真实的虚拟环境,用户可以自由的漫游、浏览、与环境互动。文中还讨论并实现了在Unity3D平台上构建室内漫游系统的关键技术。系统运行稳定、画面流畅,验证了Unity3D是开发VR项目的有效工具。
虚拟现实;Unity3D;游戏引擎;仿真
虚拟现实技术也称灵境技术或人工环境[1],是利用计算机模拟产生一个三维空间的虚拟世界,提供使用者关于视觉、听觉、触觉等感官的模拟,让使用者如同身临其境一般,可以及时、没有限制地感知三维空间内的事物。随着社会发展,虚拟现实技术在教育、建筑、工业仿真、医疗、军事和娱乐游戏等领域得到了广泛的应用[2]。目前在家居设计、场地租赁等行业中,用户主要通过照片、图片和相应的文字说明来了解相关信息,没有身临其境的感觉,缺乏与环境间的互动。室内漫游系统基于虚拟现实技术和网络技术,它更直观形象,更接近真实环境,并具有更好的交互性,能够给使用者一种逼真、身临其境的感觉。
Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎[3]。作为一款跨平台的游戏引擎,支持的平台包括PC、Mac、Linux、Web、iOS、Android、Xbox360、Play Station3等大部分主流平台。随着iOS、Android手机的大量普及和3D网络游戏的兴起,Unity3D因其强大的功能,良好的移植性,在手机和网络平台得到了广泛的应用和传播[4]。
1.1开发流程
室内漫游系统的开发遵循软件开发的一般步骤,依次是分析、设计、开发、测试、修改反复且渐进的完成所规划的功能[5]。系统的开发目标为构建一个虚拟的3D室内环境,因而其开发流程主要分为两部分:1)创建室内环境和景物的3D模型;2)通过编写C#脚本,实现用户与虚拟环境间的互动。第一部分的主要工作是利用3D建模工具3DMax创建真实环境中各个物体的3D模型。第二部分的主要工作是编写互动脚本,利用脚本将模型与Unity3D连接起来,赋予静态模型交互的能力。系统的开发流程包括创建模型,模型贴图,导入模型,编写互动脚本,全景测试等5部分,其细节如图1所示。
图1 系统开发流程
1.2关键技术
室内漫游系统是室内环境的真实再现,并为用户提供漫游,浏览和与虚拟环境交互等功能。在Unity3D平台中,以上功能的实现依赖摄影机运动,碰撞检测,3D拾取,动画和音效等关键技术。
1.2.1摄影机运动
用户利用“UP”、“DOWN”、“LEFT”、“RIGHT”键控制摄影机在场景中向前、向后、向左、向右运动以实现第一人称场景漫游,并利用鼠标控制摄影机的观察角度。首先编写运动控制脚本,然后将脚本指定给摄影机,摄影机向前运动的具体代码片段如下。
1.2.2碰撞检测
在Unity3D平台中,通常利用碰撞器来检测对象间是否发生碰撞。Unity3D中内建的碰撞器包括:BoxCollider,Sphere Collider,CapsuleCollider,MeshCollider,WheelCollider和 TerrianCollider[6]。考虑到运算效率和场景中的对象大多为规则形状,因此选择BoxCollider或SphereCollider,其实现步骤如下。
1)为需要进行碰撞检测的对象添加BoxCollider或Sphere Collider;修改 BoxCollider的 size属性或 SphereCollider的Radius属性,确保其能完全包围待检测对象;将BoxCollider或SphereCollider的IsTrigger属性设置为ture。
2)编写互动脚本,处理碰撞事件,然后将其指定给待检测对象,具体代码片段如下。
1.2.33D拾取
在漫游过程中,允许用户通过鼠标选中虚拟环境中的物体进行操作,这时就需要3D拾取技术[7]。3D拾取技术的基本思想非常简单,由摄影机和屏幕上的鼠标点击位置确定一条射线,射线射向3D世界,最先和此射线相交的物体就是被选中的物体。具体代码片段如下。
1.2.4动画和音效
动画和音效都是室内漫游系统的重要组成部分,它们会提高场景的真实性,让用户觉得这并不是一个由静态模型堆砌的世界,而是一个真实的世界[8],当开门的时候,门应该是慢慢打开的,同时还会发出声音,这时就需要动画和音效。Unity3D中有完善的动画和音效的处理机制,其实现步骤如下:
1)创建动画和音效,导入Unity3D,并根据要求剪辑。
2)在要播放动画的对象上添加动画组件,在要播放音效的对象上添加声音组件。
3)编写脚本播放动画和音效,然后将其指定给对应对象,播放开门动画和音效的具体代码片段如下。
2.1模型的构建
在整个系统的开发过程中,模型构建是最耗时的一项工作。为了让3D场景呈现出与实景一致的感觉,在模型构建上,需要尽量塑造出与原物件比例一致的3D模型。模型建好之后,接下来就是在模型表面贴上逼真的素材。素材的来源主要是网络下载的素材库和实景照片。为了降低场景的复杂度,对于室内环境的细节,比如窗户,室内背景墙等并没有单独建模,而是采用纹理贴图,用纹理图片替代复杂的模型结构。在模型的构建中还考虑到对模型的优化,通过采用删除不可见面、减少材质数量、压缩贴图等优化方法,简化了模型,减少了模型的大小。
图2 办公室模型
2.2场景设计
场景设计是系统设计的一个重要环节。当制作复杂环境时,需要将整个环境分割成若干个子场景,这样可以减少每次载入系统的模型数量,加快系统的执行速度,减少用户的等待时间。室内环境包含多个房间物体的大量3D模型,因而需要先进行场景分割,将每个房间作为一个单独的子场景,并对每个子场景单独建模。漫游时,只加载所需要的房间模型,而不用载入全部的环境模型,降低了所消耗的资源。在多场景环境中,场景间的切换会出现显示的停滞或滞后现象。为了解决该问题,在系统中设置了用于加载场景资源和显示加载进度的空场景。当用户需要场景切换时,并不直接加载新场景,而是加载空场景。由于空场景中没有模型,所以加载速度快,不会出现停滞或滞后现象。然后在空场景中再加载新场景,并显示加载进度,这样有效解决了场景切换中出现的显示停滞后滞后问题。
2.3界面设计
Unity3D中具有一个强大的GUI功能,可以利用GUI来制作浏览界面、按钮、滚动条和对话框等对象[9],常被用于实现人机交互界面游系统中,利用GUI元件制作用户登录页面和漫游页面,前者用于用户登录、退出系统,后者用于实现导航菜单,用户可利用导航菜单选择区域浏览、自动漫游或返回登录页面。区域浏览指的是让用户直接到达指定的浏览区域,自动漫游指的是让用户按照事先设计好的线路浏览。系统的登录页面如图3所示。
图3 系统登录页面
2.4交互性设计
Unity3D利用脚本实现用户与环境间的互动[10],开发者可以使用JavaScript,Mono或C#来编写脚本。Unity3D中内置了NVIDIA的Physx物理引擎,使开发者可以轻松地在虚拟环境中模拟出许多物理现象,比如坐标变换、刚体运动等。系统的交互设计主要包括环境漫游,场景切换和信息交互。
环境漫游是系统的主要功能,通过利用键盘和鼠标控制摄影机的运动,实现了用户以第一人称视角对环境的漫游、浏览。
系统采用多场景模式,每个房间都是一个子场景,当用户从一个房间进入另一个房间,这时就会出现场景间的切换。场景切换应用了碰撞检测、动画和音效技术,其实现步骤如下:
1)为房门添加BoxCollider,设置其Size属性,使其略大于房门尺寸,设置其Is Trigger属性为ture。
2)编写脚本,处理碰撞事件。在OnTriggerEnter函数中播放动画、音效,加载空场景。把脚本指定给房门。
3)编写脚本,加载新场景。把脚本指定给空场景的摄影机。
用户在漫游过程中可以使用鼠标点击场景中的物体,查看其相关的属性信息或对其进行某种操作,比如点击开关可以开、闭室内的电灯。信息交互主要应用了3D拾取技术,通过3D拾取技术确定用户的操作对象,然后执行相关的操作。
文中以3Dmax为建模工具,利用Unity3D游戏引擎,结合C#脚本语言开发了一款互动的室内漫游系统,并利用Unity3D的多平台部署功能,将其发布到Web平台。从模型图片中可以看到,系统为用户提供了一个近乎实景的虚拟环境。文中讨论并实现了在Unity3D平台上构建室内漫游系统的若干关键技术,这些关键技术同样可以应用于其他,包括电子、科技、安全、医学等相关的虚拟现实和仿真领域。
[1]朱惠娟.基于Unity3D的虚拟漫游系统 [J].计算机系统应用,2012,21(10):36-38.
[2]干建松.基于Unity3d的室内漫游的关键技术研究[J].盐城工学院学报,2011,24(4):56-59.
[3]Unity3D [DB/OL].(2011-05-01)[2015-9-30].http://baike. haosou.com/doc/5376000-5612112.htm l.
[4]金玺曾.Unity 3D手机游戏开发[M].北京:清华大学出版社,2013.
[5]李远鑫,蒋海鸥,徐亦飞,徐芝琦.基于Web3D的交互式虚拟社区[J].计算机工程,2011,37(11):289-290.
[6]吴亚峰,于复兴.Unity 3D游戏开发技术详解与典型案例[M].北京:人民邮电出版社,2012.
[7]倪乐波,戚鹏,遇丽娜,王婧.Unity3d产品虚拟展示技术的研究与应用[J].数字技术与应用,2010,21(9):54-55.
[8]黄涛.基于Unity3D的虚拟校园漫游系统的研究和实现[D].桂林:广西师范大学,2014.
[9]郑磊.基于三维网页技术的Unity3D教学管理系统的设计与实现[D].上海:上海交通大学,2013.
[10]王星捷,李春花.基于Unity3D平台的三维虚拟城市研究与应用[J].计算机技术与发展,2013,23(4),241-244.
The indoor roam ing system based on Unity3D
XIAO Jian-liang,ZHANG Cheng,LIYang
(City Institute,Dalian University of Technology,Dalian 116600,China)
Unity3D is a very popular game engine in recent years,which has the ability to crossplatforms,transplant conveniently and perform 3D graphics eminently.In this paper,with the aim to develop indoor virtual 3 D scenes,using Unity3D game engine,combined with C#script language to develop the indoor roaming system,which provides userswith an almost real virtualenvironmentwhere the user can free roaming,browse,interactwith the environment.In this paper,the key technologies of indoor roaming system are discussed and implemented on Unity3D platform.Unity3D is an efficient tool to develop VR projectis verified on the base ofstable system and smooth images.
virtual reality;Unity3D;game engine;simulation
TN02
A
1674-6236(2016)19-0054-03
2015-10-27稿件编号:201510195
辽宁大学生创新基金(201313198009)
肖建良(1964—),男,辽宁大连人,硕士,副教授。研究方向:计算机应用技术、虚拟现实。