您好, 访客   登录/注册

基于Unity3D的虚拟校园漫游系统

来源:用户上传      作者:

  摘 要
  本文以真实校园(布局设计、交通、景观、教学及生活环境)为蓝本,实现访问者以第一人称视角进行虚拟校园漫游,访问者可通过W、A、S、D按键控制漫游路径,增加了系统的交互性。
  关键词
  虚拟漫游;Unity3D;3DsMax;虚拟校园
  中图分类号: TP391.9                     文献标识码: A
  DOI:10.19694/j.cnki.issn2095-2457 . 2020 . 06 . 85
  0 引言
  虚拟现实技术是综合计算机图形技术、人机交互技术、电子信息、仿真技术及立体显示技术等多种技术的实用技术。它通过模拟虚拟环境从而给人沉浸感,如同进入真实世界,同时该技术具有交互性,用户与虚拟环境可以相互作用。
  虚拟漫游系统[1]是虚拟现实(Virtual Reality,简称VR)技术的运用,以对象的实际数据为基础,创建一个虚拟的环境,让用户有身临其境的沉浸感,具有逼真性和实时交互性。虚拟校园漫游系统是数字校园建设的基础,可以为学校树立良好的形象,提高学校的知名度,宣传校园文化,还可以作为校园规划的辅助工具。虚拟校园漫游系统以真实校园(校园布局设计、交通、景观、教学及生活环境)为蓝本,实现访问者以第一人称视角进行虚拟校园漫游,访问者可通过W、A、S、D按键控制漫游路径,增加了系统的交互性。
  1 主要开发工具
  3Dsmax 3Dsmax[2]是Autodesk公司开发的三维动画制作软件 ,它是当今世界上主流的三维建模、三维动画制作及渲染软件,它采用几何建模技术,逼真度高,操作简单,被广泛应用于制作室内外效果图、角色动画、虚拟现实、游戏开发等领域。它具有强大的渲染功能,渲染速度快、效果好。
  Unity3D U3D是Unity Technologies开发的一款多平台的综合型游戏开发工具,通常用来制作动漫、三维游戏、建筑漫游等,它可以和3Dsmax无缝对接,并且可以将场景文件打包成可执行文件。它有丰富的内置资源,包括自带的植物、水体、天空盒、粒子效果等。它主要用来完成场景搭建、漫游交互体验等。
  2 开发流程
  首先,结合校园平面规划CAD图及实地测量、取景,得到实际地理数据和图片;以此为参考,在3dmax中建立其对应的三维模型;再将这些模型以兼容的格式导入到交互软件Unity3D中进行贴图、场景构建,然后实现交互漫游;最后导出exe文件,如图1。
  2.1 数据采集、处理和建模
  场景建模包括建筑物建模和环境建模,场景所需的空间数据可以通过校园平面规划CAD图、实地测量和采集图片获取。本文的信息采集过程如下:
  (1)学院办公室协助提供学校早期的平面规划CAD图,获得场景的分布和位置信息等主要数据;
  (2)实地测量学校后期建设的建筑物,获取它的外形信息,如长、宽、高度数据;
  (3)对各建筑物进行拍照,用Photosho进行处理留作贴图和材质用;
  (4)收集校园主要植物信息,确定种植的树种。
  (5)使用3DsMax进行建筑物的建模(环境建模部分包括树木、草坪和天空,这些选用U3D自带的模型),将其发布成FBX格式的文件。
  2.2 模型导入U3D
  具体步骤:
  (1)运行U3D,创建工程项目。
  (2)U3D自帶的Tree、Water(Basic)、Water(Pro Only)快速创建虚拟环境,使用Create Terrain创建并编辑地形;使用Skyboxes完成天空的绘制。使用Direction Light创建灯光。
  (3)将各类建筑物模型的.FBX格式文件导入到U3D中,在U3D中指定模型的材质和贴图。
  (4)对天空、地面、墙壁和楼梯添加碰撞组件,避免漫游时出现穿越刚体的错误效果。
  3 系统交互设计
  3.1 漫游功能的设计
  人机交互技术是通过计算机输入、输出设备,以有效的方式实现人与计算机对话的技术。本系统的人机交互方式是让用户通过W、S、A、D按键控制漫游路径。关键代码如下:
  Var Speed=25;
  function Update () {
  //键盘漫游
  if (Input.GetKey (KeyCode.A)) {
  transform.Translate(-Speed*Time.deltaTime,0,0, Space.Self);}
  if (Input.GetKey (KeyCode.D)) {
  transform.Translate( Speed* Time.deltaTime,0,0,Space.Self);}
  if (Input.GetKey (KeyCode.W)) {
  transform.Translate(0, 0, Speed*Time.deltaTime, Space.Self);}
  if (Input.GetKey (KeyCode.S)) {
  transform.Translate(0,0,-Speed*Time.deltaTime,Space.Self);}
  3.2 GUI界面交互设计
  当单击“开始”时,能够进行场景的跳转,进入场景,实现漫游。当单击“退出系统”时会自动退出程序。
  部分代码如下:   Function OnGui(){
  GUI.Label(Rect(270,140,400,200),str);
  If(GUI.Button(Rect(240,300,100,25),”开始”))
  {Application.LoadLevel(“laizhiyuan02”);}
  If(GUI.Button(Rect(550,300,100,25),”退出系统”))
  {Application.Quit();}
  }
  3.3 碰撞检测技术
  碰撞检测是模拟现实中的人或物体在遇到障碍物时发生的本能反应。当漫游角色碰到墙壁、大地、天空等物体时,不能继续向前,以此保证漫游的逼真性。U3D支持碰撞检测,方式有两种,一种是利用碰撞器,另一种是利用触发器。使用碰撞器检测,发生碰撞的物体之间会有碰撞模拟,会产生反弹或停顿。有些情况只需要检测物体之间是否发生接触,不需要产生碰撞效果,这种情况下可以使用触发器进行接触检测。
  碰撞信息检测:
  Void OnCollisionEnter(Collision c)
  {Debug.Log(c.gameObjet.name);}
  触发信息检测:
  void OnTriggerEnter(Collider collider){Debug.Log("starting”);}//开始接触
  void OnTriggerExit(Collider collider){Debug.Log("ending");}//接触结束
  void OnTriggerStay(Collider collider){Debug.Log("continuing");}//接触持续中
  4 软件优化
  对该漫游系统的可执行文件进行了黑盒测试,系统运行有些缓慢。分析原因主要是因为电脑硬件配置较低,这对模型数量和模型复杂度提出了要求。在保证逼真度的前提下,减少了部分环境建模,同时在建模过程中尽量减少模型的分段数和迭代次数。在U3D平台上,对灯光进行优化,U3D有顶点灯光和像素灯光两种渲染方式,顶点灯光只计算游戏模型的顶点照明和通过插值計算得出模型表面的所有光线;像素灯光需要对屏幕每个像素进行计算,耗费资源。优化程序,删除脚本中不需要的方法;除了必要的地形和建筑,尽量缩小视角范围;常用的变量或方法定义为全局静态变量或方法;尽量少地使用除法和模运算。
  5 结论
  随着虚拟现实技术的发展,今后的软件系统会更加友好,如何增加用户的沉浸感、增强系统的交互性,是一个很有价值的课题。该系统实现了碰撞检测和虚拟漫游,通过该项目的历练可以促进对Unity3D更深入地掌握,而Unity3D的强大功能将会带领我们进入一个欣欣向荣的、生机蓬勃的、充满挑战的新领域。
  参考文献
  [1]https://baike.baidu.com/item/虚拟漫游/8458400?fr=aladdin.
  [2]时代印象.3dsMax2016完全自学教程[M].北京: 人民邮电出版社,2017年:(1-10页).
  [3]https://baike.baidu.com/item/Unity3D/3064002?fr=aladdin.
  [4]https://www.cnblogs.com/520YAOER/p/9709693.html.
  [5]https://gameinstitute.qq.com/community/detail/118653.
转载注明来源:https://www.xzbu.com/8/view-15180693.htm