ImageVerifierCode 换一换
格式:DOC , 页数:27 ,大小:6.43MB ,
资源ID:3010646      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/3010646.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(大学毕业论文-—基于unity3d的三维虚拟电脑组装实验系统开发.doc)为本站上传会员【胜****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

大学毕业论文-—基于unity3d的三维虚拟电脑组装实验系统开发.doc

1、基于Unity3D的三维虚拟电脑组装实验系统 基于Unity3D三维电脑组装实验系统的实现 【摘要】实验教学不仅能够培养学生的动手能力,而且还能起到巩固课本上理论知识的作用。但是由于我们国家人口基数庞大,教育资源有限,实验器材紧缺,不能满足广大在校学生或者社会成人求学需求,因而成为教学和学习中最难以付诸实践的薄弱环节。随着虚拟现实技术的出现,实验教学有了新的思路。Unity3D引擎对开发仿真性非常高、交互性非常好的虚拟实验环境具有很大的帮助。本文在对虚拟实验室的研究现状进行充分调研的基础上,借助Unity3D引擎和3DS Max三维建模软件,搭建了一个逼真且操作方便、具有交互

2、功能的组装计算机硬件的虚拟实验操作平台,对组装计算机实验进行了模拟,实现了实验过程以及部分实验现象的模拟。系统的主要功能是让用户采用虚拟仪器完成组装过程,从而达到学会组装计算机的目的。 【关键词】 虚拟实验;Unity3D;计算机组装; 1. 引言 1.1 研究背景及意义 早在十六世纪,实验就被运用于教育教学。实验是指根据科学研究的目的,尽可能排除外界因素的影响的同时突出主要实验因素,并且利用一些专门的仪器设备而人为地改变、控制或者模拟研究对象,使某一些事物(或过程)发生或再现。实验的目的在于通过学习者亲自动手参与实验,从而培养学习者的观察能力、分析能力和实践能力。研究表明,人的

3、动作记忆效率远远高于语言文字的记忆效率,所以通过动手参与的学习比单纯看书要更有效率,实验教学通过让学习者了解事物的本质,培养学习者的研究能力、创新能力,加强学习者对知识的运用和实践,因此成为教育教学中一个不可分割的部分。 最开始的实验教学都是真实实验,学习者在真实的实验环境下操作实验设备来完成实验目的。但是随着人口数量的增加,知识研究领域的扩展,真实实验暴露出了许多缺陷,比如许多实验器材价格昂贵,实验资源无法满足广大学习者的需求,实验存在安全隐患,真实场景带来的实验误差等等。虚拟实验的概念也就应运而生了。 虚拟实验的概念最早由美国弗吉尼亚大学的威廉·沃尔夫(William Walf)于19

4、89年提出,它是在虚拟现实技术的基础上产生和发展起来的,是对真实实验尽心模拟或再现的一种实验模式。它的主要组成部分都是通过计算机虚拟而成的,包括实验室环境,实验室仪器以及实验资源。在虚拟实验中,学习者不受时空的限制,可以随时随地的进入虚拟实验系统,通过键盘或者鼠标、数据手套等交互设备与虚拟实验系统中的虚拟仪器进行交互,完成与真实实验一样的各种实验操作过程。 Unity3D作为一款专业的商业游戏引擎,早在2010年就进入了我国,由于其友好的操作界面和强大的性能,在国内积攒了众多的开发者。其官网上得AssetStore也给广大开发者提供了数量众多,类目琳琅的插件,可以大大的缩短开发者的开发周期。

5、近年来,Unity3D为虚拟现实提供了完整的解决方案,其强大的物理引擎,基于DirectX和OpenGL的高度优化渲染管道,还有可编辑的Shader着色器,让模拟真实多变的生活环境变成现实。因此我选择Unity3D来开发这样一个虚拟电脑组装实验的系统,为学习者提供一个自由、真实的实验平台,利用本系统进行实验教学,让学习者认识计算机硬件,掌握组装电脑的一些基本技能。 1.2 研究内容 本文主要在于借助Unity3D引擎将虚拟现实技术引入虚拟实验中,探索新的虚拟实验的教学模式。具体研究内容包括以真实实验在教育教学中的重要作用和协作学习对学习者能力的培养作为立足点,将虚拟现实与虚拟实验结合起来;

6、利用Unity3D实现虚拟计算机硬件与实验者交互,突破实时交互的一些难点;完成整个系统架构设计,并且编写代码实现整个系统功能。 2. 虚拟实验器材的制作 2.1 3DS Max模型创建 2.1.1 多边形建模技术 多边形建模技术是三维建模技术中比较常见的一种建模方式。现实世界中的很多物体都可以看成是由基本的几何体进行变形和细分得来的。多边形建模就是基于简单的长方体、圆柱体、球和其它一些几何体,运用添加线,点来进行细分,面挤出,边挤出等三维建模手法来完成模型的创建。 多边形建模技术的优点在于它能很快的把目标模型的大体轮廓勾勒出来,对于精度要求比较低的模型来讲,甚至可可以经过简单的几次

7、变形就可以达到想要的效果。因此对于较为规则的家具或者家用电器来讲,使用多边形建模可以极大地提高工作效率。 计算机组装实验所用到的计算机的主板、内存条、显卡、电源以及机箱显示器等主要零部件都是比较规则的几何体,主板上看似比较复杂的各种电阻和插针,仔细看其实都是一些简单的圆柱体。 下面图1、图2、图3是用3DS Max多边形建模方法制作的计算机部件模型。 图1 CPU制冷风扇 图2 主板 图3 液晶显示器

8、 2.2 模型UV拆分和材质贴图 UV的是贴图坐标的简称,它定义了一张二维图片将以何种方式贴到三维对象的表面之上。在3DS Max中通过加UVW Map修改器可以为一些常用模型选择贴图方式,比如平面映射、柱面映射、球面映射、立方体映射等。但是当遇到比较复杂的模型时,就不能依赖这种方式了,需要手动来为模型拆解UV。 UV拆分有几个原则:拆分出来的UV碎块要尽量少,这要贴图贴上的接缝就会更少,便于处理;需要将拉伸降低到最小,UV反映的是图片上的每一个像素点到模型表面上每一个点的对应关系,如果UV出现拉伸,就会出现模型的表面一些区域承载过多的图像信息,另一些区域承载的图像信息却太少,贴图就得

9、不到正确的显示;还要避免贴图坐标的重叠。贴图坐标重叠将直接导致重叠的贴图部分分配不到正确的图像信息;最后还要尽可能有效使用纹理空间。 由于在建模的过程中,经常需要将一个模型拆分成很多部分来创建,最终将各个部分整合成一个完整的模型。而模型在最终的材质表现上,各个不同的部分可能需要不同的贴图或者材质。这在计算机的硬件上体现的尤为明显,比如一块显示器的显示屏幕和底座的材质是明显不一样的,而在显示器的边框上可能还有生产厂商的Logo和按钮。因此,很多时候需要用到多维子对象(Multi/Sub-Object)材质。只要在建模的时候,给每个子对象分配好材质ID,就可以将子材质赋予给指定的模型子部件。下面

10、以内存条为例: 首先在面级别下选中内存条上所有的芯片,在右侧的修改器栏里找到多边形材质ID组,设置材质ID号为2,如图4: 图4 为内存芯片指定材质ID 然后用同样的方法选中内存条的侧边,为它指定材质ID号为1,如图5: 图5 为内存条侧面指定材质ID 用这种方法给内存的其它部分也指定ID后,就可以进入材质编辑器,创建一个多维子对象材质,因为总共为内存条指定了5个材质ID,所以需要创建一个包含5个子对象的多维子对象材质,每个子对象材质材质可以单独编辑,漫反射颜色可以纯色也可

11、以贴图,环境光和高光反射根据具体情况进行设置,如图6所示。由于Unity3D引擎也是支持多维子对象材质的,所以在3DS Max中做的这些工作都不会是徒劳的。 图6 多维子对象材质设置 将用到的贴图保存在一个文件夹里,在导入U3D引擎的时候需要重新进行指定。准备工作做完之后就可以导入U3D引擎了。 2.3 资源导入Unity3D引擎 将三维软件制作的模型导入Unity3D引擎时需要注意一些问题。 首先是X轴向偏转。3DS Max模型导入引擎后将自动有一个绕X轴270度的偏转,在Unity中旋转模型的时候,Y轴

12、的参照方向永远朝上,而X和Z轴则以模型的自身局部坐标为准,所以当模型旋转270度后,Z轴正好与Y轴重合。解决这个问题需要将模型文件导出成为.3ds类型的文件再导入Unity。 其次是材质问题。模型文件导入Unity后,Unity只会自动生成材质球,但是材质的贴图需要手动导入Unity工程然后进行指定。如果模型具有法线贴图或者光照贴图,还需要选择正确的着色器(Shader)才能达到想要的效果。 最后是缩放因子。三维模型的单位需要在前期建模的时候就设置并统一,否则模型出来的大小会不匹配。Unity中的1单位是fbx文件中1单位的100倍,因此如果Unity中1单位定义为1米的话,那

13、么在3DS Max中制作模型的时候,单位就应该设置为1厘米。缩放因子在导入模型时也可以手动设置,如果是以fbx格式的文件导入的模型,可以将模型的缩放因子设置为0.01。 将外部资源导入Unity有三种方式。 第一种方式是存入工程文件夹。创建工程以后,在磁盘上会有一个工程文件夹,找到工程名下的Asset文件夹,将需要的模型资源、贴图资源复制粘贴到这里即可。为了工程结构的简洁明了以及方便查找资源,可以分别为模型和贴图创建自己的文件夹。 第二中方式是在直接拖入到Unity中。在外部文件夹中选中需要导入的资源,直接拖拽进Unity的Project窗口中即可。 第三种方式主要是用来导入.uni

14、typackage类型资源。Unitypackage是Unity打包文件生成的一种格式。在Unity的顶部菜单栏找到Asset→Import Package→Custom Package,在本地磁盘找到需要导入的unitypackage文件点击确定就行了,如图7所示。 图7 导入unitypackage文件 图8 模型导入设置 模型导入U3D后需要设置一些参数,正确设置这些参数,模型才能更好的被程序使用。选中导入的模型,在监视器窗口会出现如图8的菜单。其中有几个主要参数需要进行设置: Scale Factor——前面提到

15、的缩放因子,这里我根据实际模型的匹配需要将它设置为0.004。 Mesh Compression——面片压缩。优化模型的面数从而优化最终程序的性能。 Read/Write Enabled——勾选将使得导入的资源可以在引擎内被读写。 Generate Colliders——生成碰撞器。勾选将会生成匹配模型的碰撞器。 其他的参数因为在这个系统中无需用到,所以按照默认的参数设置就可以了。 3. Unity3D引擎研究 3.1 引擎介绍 Unity3D是一个用于创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的综合型的创作工具,开发者是Unity Technologies,目

16、前最新的稳定版本是2013年12月发布的4.3.1。2005年6月Unity第一个版本1.0.1发布,标志着Unity的诞生。 Unity是一个跨多平台的游戏引擎,利用交互的图形化开发环境作为编辑器提供给开发者,可运行在Windows和Mac OS X下,可发布应用到Windows、Mac OS X、Android、iOS、Web等平台。 Unity拥有以下主要特性: 层级式的综合开发环境、视觉化编辑,详细的属性编辑器和动态游戏预览。 跨平台支持。可以开发Windows、Mac OS X、iOS、Android、Blakberry、Xbox、Windows Phone等平台的应用程序。

17、 自动资源导入。项目中的资源会被自动导入,并根据资源的改动自动更新。 基于Direc3D(Windows)、OpenGL(Mac、Windows)的图形引擎,并且有自己的API(Wii)。 支持Bump mapping、Reflection mapping、Parallax mapping、Screen Space Ambient Occlusion,动态阴影使用的是Shader Map技术,并支持Render-to-Texture和全屏Post Processing效果。 Shader编写使用ShaderLab语言,同时支持自有工作流中的编程方式或CG、GLSL语言。 内置对Nvd

18、ia的PhysX physics engine支持。 游戏脚本是基于Mono的Mono脚本,开发者可以使用JavaScript、C#或Boo语言编写脚本。 音效系统基于OpenAL程序库,可以播放Ogg Vorbis压缩音效,视频采用Theora编码。 3.2 事件函数、脚本执行顺序和生命周期 Unity中的脚本不像常规程序在一个循环中的执行直到任务完成,而是通过调用一些事先声明好的函数,断断续续的将控制权传给一个脚本。当一个函数执行完毕后,控制权便又交回给Unity。这些函数就是事件函数。 下面按照脚本的执行顺序介绍一些常用的Unity事件函数。 Awake()。当前控制脚本实例

19、被装载的时候调用。一般用于初始化整个实例时使用。 Start()。当前控制脚本第一次执行Update之前调用。 Update()。最常用的事件函数,每帧都执行一次。 FixedUpdate()。每固定帧绘制时执行一次,与Update不同的是FixedUpdate是渲染帧执行,当渲染效率地下时,FixedUpdate的调用次数也会跟着下降。 OnEnable()。当脚本被启用时调用。 OnDisable()。当脚本被禁用时调用。 OnDestroy()。当脚本的宿主物体被销毁的时候调用。 Unity中编写的脚本一般都会绑定到一个GameObject上,这个GameObject就是程

20、序中的一个基础元素。一个脚本的生命周期就是和它绑定的GameObjec息息相关的,当程序开始运行的时候,Unity会为每一个场景中活跃的GameObject上的脚本生成一个对象,而当脚本的宿主物体(即脚本所绑定的物体)被销毁的时候,脚本的对象也就不存在了。 Unity的脚本默认都会继承与MonoBehavior基类。不继承于MonoBehavior的类通常用来存放一些全局的数据,它在整个程序运行的过程中都是存在的。 3.3 常用API Transform类。继承于Component类,用于描述和控制一个三维或者二维物体的位置、旋转和缩放属性,。在Unity的场景中,每一个物体都有一个Tr

21、ansform组件,被用来存储和操控位移、旋转和缩放。Transform允许拥有父对象,子对象的属性基于父对象发生偏移。其类图如图9所示。 Transform的常用属性有: childCount:当前Transform所拥有的子对象的数量。 eulerAngles:旋转的欧拉角度数。 localEulerAngles:当前Transrom相对于父对象的旋转欧拉角。 localPostion:相对于父对象的位置 localRotation:相对于父对象的旋转。 Parent:此Transform的父对象。 Transfrom的常用方法: DetachChild

22、ren:分离所有子对象。 Rotate:指定一定的旋转角度给当前的对象。 RotateAround:让当前的对象绕着某一个指定的点旋转一定的角度。 Translate:让当前对象的位置沿着指定的方向和距离移动。 Vector3类。三维向量类,使用它来记录一个物体在三维空间里X、Y、Z轴上的位置、旋转和缩放信息。Vector3类定义了一些静态变量来代表一些常用的三维向量,如Vector3.back表示的的是Vector3(0,0,-1),Vector3.forward表示的是Vector3(0,0,1)等等。在编程过程中可以直接快捷的使用这些变量。 Vector

23、3的常用属性有: Magnitude:返回当前三维向量的长度(只读)。 Normalized:返回当前向量的标准向量。 X:当前向量的X值。 Y:当前向量的Y值。 Z:当前向量的Z值。 Vector3的常用方法有: Angle:返回两个Vector3向量之间的夹角。 Cross:返回两个Vector3向量的叉乘。 Lerp:在两个Vector3向量之间线性差值。 MoveTowards:直线移动一个点到目标点。 图9 Transfrom的类图 3.4 Unity3D的第三方UI插件NGUI NGUI是严格

24、遵循KISS原则并用C#编写的Unity插件,提供了强大的UI系统和事件通知框架,代码简洁并且易于扩展。作为目前最受欢迎的Unity的UI插件,甚至完全取代了Unity自身所提供的UI系统,那么它的特色在哪里呢? NGUI完全集成到Inspector面板中,并且不需要点击Play按钮就能直观的看到效果。它基于组件、模块化的特性,使用户只需要为界面空间附加相应的行为就可以达到目的,而不需要编写码。除此之外,NGUI还具有十分灵活的事件系统,可以让发杂的UI占用一个draw call,还支持光照贴图、法线贴图、折射等特性。 NGUI的使用方式与Unity的使用方式一样。使用Widget Too

25、l可快速创建模版化的控件,也可以从基本组件创建自己的控件。可以按照开发者的意愿拷贝或者粘贴,还可以把制作好的窗口保存为Prefab(预制,可复用的物体)。所有一切都只需要简单的点击操作就可以完成,当需要编写代码让控件产生一些效果时,NGUI提供了丰富的接口供开发者使用,开发者也可以选择参考简单的例子胆码,把控件转变为按钮、输入框或者基于时间来改变控件颜色、播放声音和触发动画等等。 要在Unity中使用NGUI,必须先导入NGUI的unitypackage包。成功导入到项目中后,在顶端的菜单栏里可以看到如图10所示的NGUI的菜单栏:

26、 图10 NGUI的菜单 开发者可以利用这些功能快捷的创建出自己的UI系统。同时NGUI也提供了一些实例场景共初级开发者学习借鉴,如图11所示。 图11 NGUI的示例UI 3.5 材质、灯光和着色器 材质,简单的说就是物体看起来是什么质地。材质可以看成是材料和质感的结合,在渲染过程中,它代表的是物体表面各种可视属性的结合,比如表面的色彩、纹理、光滑度、透明度、反射率、折射率、发光度等。 着色器的作用就是把物体表面的各种属性结合起来。Unity内置了有80多个着色器,能够满足大多数基本场景的渲染。这些着色

27、器分为标准着色器、透明着色器、透明镂空着色器、自发光着色器、反射着色器五大部分。开发者可以使用ShaderLab语言开发更多自定义的着色器,来满足实际项目的需要。 没有灯光,什么都是不可见的。因此,给场景物体赋予了材质以后,还需要配合灯光将它展示出来。Unity内置有四种类型的灯光,它们分别是平行灯光(Directional Light)、点灯光(Point Light)、聚光灯(Spot Light)、区域灯光(Area Light)。平行灯光多用来模拟太阳光,点灯光和聚光灯多用来模拟室内照明装置,区域灯光可以用来制作区域发光体。 在Unity的工程里创建好一种类型灯光后,可

28、以在监视器(Inspector)窗口里调节它的具体属性,如图12所示: 图12 灯光的属性调节 Type可以切换灯光的类型,Range改变灯光的照射范围,Color代表灯光的颜色,Intensity是灯光的强度,Shadow Type是指灯光的阴影类型。 4. 虚拟电脑组装实验系统实现方案 4.1 系统简介 本系统是基于Unity3D引擎实现的一个帮助实验者完成电脑组装实验的系统。用户可以通过此系统了解台式机的各种硬件以及这些硬件之间的联系,通过何种方式联合工作的,最后在一个虚拟的场景里,用户可以亲自操纵电脑的各个部件来组装一台电脑。

29、 整个系统分为四个模块。主界面模块、基础知识模块、硬件展示模块、教程演示模块和实战装机模块。它们之间的关系如图13所示: 图13 模块关系图 系统程序的运行流程图如图14所示: 图14 程序运行流程图 4.2 实现方案介绍 虚拟装机系统的核心部分是三维场景摄影机的控制和控制物体在XYZ三个坐标轴上的移动旋转。。输入与摄影机相应的对应表格设计如表1所示: 表1 摄像机控制 输入 响应 ALT+鼠标左键 摄像机以当前目标点为中心旋转 ALT+鼠标滚轮 拉近或者

30、拉远摄像机视角 ALT+鼠标中键 移动摄像机位置 加入Alt键的目的是为了区分选中电脑部件和操控摄像机,控制电脑部件的输入与响应对应的表格设计表2所示: 表2 物体的控制 输入 响应 鼠标左键+移动 移动物体 (Gizmo未显示情况下)鼠标右键单击 显示物体在三个轴向上得Gizmo 鼠标左键单击Gizmo 在三个轴向上旋转物体 (Gizmo显示情况下)鼠标右键单击 隐藏Gizmo 用户界面方面,我用NGUI的摄像机来渲染所有的UI界面元素,因为NGUI的控件事件响应需要NGUI的Camer

31、a支持。同时为了渲染3D的场景,需要另外架设一个3D摄像机。 4.3 系统主界面实现 系统主界面主要是提供进入其他场景的入口,是一个二维的场景,直接用NGUI来搭建就行了,完成的效果如图15所示: 图15 系统主界面 首先界面所有的图片都需要打包成NGUI的Atlas,这是NGUI为减少Draw Call的一种方案。将所有的UI元素打包成一个图集,所以在绘制不同的UI的时候,系统只需要调用一次Draw Call就行了。 其次,为了显示中文字体,需要制作字体。NGUI提供两种字体方案,第一种是动态字体(Dynamic Font),另一种是静态字

32、体(Normal Font)。动态字体的原理是每一次使用字体的时候系统都去字体库读取字体,将读取到的信息渲染成一张纹理显示出来,这样做会消耗系统的性能,但能带来的好处是不会受限制的使用你想要任何文字,而且制作也较为方便。静态字体是提前将需要的文字制作成一张纹理。这种方式需要提前预估需要用到的文字,然后使用BM Font软件制作纹理,导入NGUI生成字体预制才能使用。它的缺点是步骤繁琐,而且可能遇到制作的字体纹理无法满足后续的需求,导致需要重新制作的问题。但它也有运行比较稳定,且比较节省资源的优点。 有了字体和图片就可以在工程里把UI层级搭建起来了,场景元素的层级结构如图16: 图16

33、主界面场景元素层级图 场景物体之间的通讯关系如图17所示: 图17 主场景物体间通讯方式 所有的按钮都只和Load Scene这个脚本通讯。当用户发生点击事件时,就通知Load Scene 脚本执行相应的操作。Load Scene脚本定义了LoadFoundation()、LoadHardWare()、LoadExperience()、LoadInstructions()、Exit()方法,分别响应不同的按钮事件。 4.4 基础知识介绍场景的实现 基础知识场景的作用是向用户展示组装电脑的一些基本流程,让用户了解认识计算

34、机的各个组成部件。主要采用NGUI的Drag Panel来制作。用户可以左右滑动图片来显示更多的内容。界面如图18所示: 图18 基础知识介绍场景 NGUI Draggable Panel的实现原理是拖动Panel Content,Panel在渲染的是固定区域的UI元素。制作拖动视图的流程如图19所示: 图19 可拖动视图的制作流程 4.5 硬件展示场景的实现 硬件展示场景主要也是基于NGUI的Draggable Panel来实现。不同之处在于添加了计算

35、机部件的加载和对模型的旋转控制。完成的场景如图20 图20 硬件展示场景 左侧可拖动的每一个元素都是一个按钮,脚本Show Components控制发生点击事件时显示哪一个具体模型。模型上绑定了脚本Spin With Mouse,用来控制模型跟随鼠标旋转。关系图如图21所示: 图21 硬件展示脚本关系图 4.6 教程演示场景的实现 教程演示场景主要用到的时候Unity的视频播放技术。在Unity中,外部导入的视频是以电影贴图(Movie Texture)的形式存在的

36、官方的文件介绍说,Unity支持AVI、MP4、FLV、OGG等多种视频格式,只要将视频文件导入Unity工程中,Unity就会自动识别视频格式文件并把它装成Movie Texture。但是在实际操作过程中,我发现只有OGG格式的视频文件才能被Unity识别,然后进行转换。播放和暂停视频播放的C#代码如图22下: 图22 控制视频播放的代码 场景完成后的效果如图23所示: 图23 教程演示场景 4.7 帮助界面的实现 帮助界面其实并非一个新的场景。在UI系统中,可以事先做好多个窗口,

37、然后通过响应用户的点击事件来显示和隐藏某些窗口,就可以实现一个场景内不同菜单之间的跳转。 帮助窗口主要提供给用户一些如何操作系统的文字信息,用动态字体和UILabel制作就行了。效果图如图24所示: 图24 帮助界面效果图 4.8 虚拟装机界面的实现 虚拟装机场景是本系统的核心部分。实验者将在这个场景里进行和虚拟物体进行交互的体验,完成组装台式电脑的实验。 搭建一个虚拟的装机场景。按照本文前面讲到的从外不导入3DS Max制作的模型到Unity,Unity会自动生成材质球。指定好材质后,还需要为场景添加灯光,由于是室内场景,所以主要以点灯光为主。场景效果图如图25所

38、示: 图25 虚拟装机场景 由于需要和虚拟世界的物体产生交互,所以需要做鼠标和物体之间的碰撞检测,当鼠标碰触到虚拟世界中的物体后,虚拟物体做出响应。 在Unity中,做碰撞检测有三种方法。第一种是碰撞器,第二种是触发器,最后一种是射线检测。 碰撞器是一群组件,它包含了很多种类,比如Box Collider,Capsule Collider等,这些碰撞器应用场合不同,但作用基本一样。 触发器则表示当碰撞发生时触发事件。添加触发器只需要在Collider的监视器窗口勾选IsTrigger选项即可。在Unity3d中

39、主要通过如图26所示的接口来处理碰撞器和触发器的碰撞检测: 图26 Unity中的碰撞器接口 具体来讲碰撞器还可分为三类。 静态碰撞器(Static Collider)指的是没有附加刚体而附加了碰撞器的对象。这类对象会保持静止或很轻微的移动。 刚体碰撞器(Rigidbody Collider)指的是附加了刚体的对象。 运动学刚体碰撞器(Kinematic Rigidbody Collider)指的是在刚体组件中勾选了IsKinematic属性的碰撞器。它将不受物理力的影响。 碰撞检测发生时不同碰撞器发送给Collison类对

40、象的消息如图27所示: 图27 碰撞检测时发送信息表 触发器触发时不同碰撞器发送给Collision类对象的消息如图28所示: 图28触发器触发时发送信息表 由于需要检测玩家鼠标所在的屏幕点与场景物体之间的碰撞,而鼠标无法添加碰撞器,所以这里需要使用到射线法来进行碰撞检测。它的原理是以当前鼠标点为起点,垂直于屏幕向里画一条一定长度的射线,将这条射线穿过的物体进行标记。本实验用到的射线碰撞检测代码如图29所示: 图29 射线检测源代码

41、场景中的每一个电脑组件都附加了三个脚本ObjectMoveControl、Hit、DistanceDetect分别来控制移动、旋转和距离检测。它们的关系如图30: 图30 电脑组件的控制 4.9 场景音乐和按钮音乐 Unity中可以通过给一个游戏对象添加AudioSource来添加音乐文件,支持MP3、ogg等常见的音乐类型文件,AudioSource可以控制音乐的播放以及单边音效等效果。 音乐类型的文件在导入的时候,需要设置该音乐文件时一个2D音乐还是3D音乐。二者的区别在于,2D音乐无论“听者”的位置距离声源有多远

42、声音的大小都是不变的。3D音乐则类似现实世界中的音乐,当你离声源越近时听到的声音就越大。在本实验中,由于是给整个程序添加一个舒缓的背景音乐,所以勾选2D音乐就可以了。 上面提到“听者”的概念,在一个环境里有了声音,却没有人来听,那声音的存在就没有意义了,在Unity中也是一样。为了听到声音,需要在场景里添加一个Audio Listener。它通常作为组件添加在场景的主摄像机上。 在本系统中,我们在主场景中创建了一个名为Audio Source的空物体,并未它添加Audio Source组件,并把导入的背景音乐文件赋值到监视器里的Audio Clip上。进行到这里的时候,需要注意的是,由于

43、背景音乐是全局的,也就是说在整个游戏的运行过程中,音乐都要存在,而Unity在加载新场景的时候,会将上一个场景内的所有物体全部销毁。为了保持音乐文件不被销毁,需要用到Unity提供的DontDestroyOnLoad()接口。这样音乐就不会被销毁了。 有的用户可能更喜欢安静一点的实验环境,所以还需要添加一个对音乐开关的控制。Audio Source组件中的Mute属性就控制着声源文件的开关。用NGUI制作一个按钮,但点击事件发生时,访问Audio Source的Mute属性并改变它即可。实现的源代码如图31所示: 图31 背景音

44、乐的控制 按钮的音乐控制比较简单,使用NGUI提供的组件UIPlaySound即可。组件在监视器里的赋值情况如图32所示: 图32 NGUI UIPlaySound赋值 5. 资源优化和最终发布 最终程序发布之前为了确保游戏具有流畅的运行性能,还需要对场景里的一些资源进行优化。 首先是图片资源。图片资源在运行的过程中最消耗性能,因此在导入图片的时候就要对图片进行压缩。在桌面平台下,不同格式图片的区别如表3所示: 表3 各图片格式及说明 纹理格式 说明 DXT1 压缩RGB纹理,漫反射最常见格式,每像素4位 DXT5 压缩RGBA纹理,是用于漫反射和高光控制的

45、纹理格式,每像素1字节 RGB 16 bit 65000 种颜色,无 alpha。压缩 DXT 格式使用的内存较少,通常显示效果较好 RGB 24 bit 真彩色,但是无 alpha。 Alpha 8 bit 高质量 alpha 通道,但是无任何颜色。 RGBA 16 bit 低质量真彩色。具有 16 个级别的红色、绿色、蓝色和 alpha。压缩 DXT5 格式使用的内存较少,通常显示效果较好。 RGBA 32 bit 带 alpha 的真彩色,最高质量 发布应用程序的时候,需要进行平台选择。本系统最终发布的平台是PC平台和Web平台。由于两个平台对输入的要求基本一致,不

46、同的是在发布的时候再右侧Platform栏里选择对应的平台发布就可以了。 PC平台发布设置如图33所示: 图33 PC端发布设置 6. 结束语 本系统是基于Unity3D引擎、利用虚拟现实技术开发而成的一个虚拟组装电脑的系统。有Unity3D强大的图形渲染管线支持,可以得到非常真实的环境模拟和虚拟操作模拟。 不用实际动手搬动沉重的电脑组件,实验者只要打开系统,就像完游戏一样就能完成学习计算机基础知识中的一个十分重要的实验。 由于Unity3D友好的图形界面,跨平台支持以及对

47、C#语言的支持,使得它不仅在游戏领域里发光发热,近年来,在虚拟现实、虚拟教学、商品展示等领域得到了广泛的领域。Unity是一款商业的引擎,从发布以来,其开发团队一直在维护和更新Unity的版本。即将发布的Unity5加入了Enlighten实时全局光照、实时光照贴图预览、高级着色器三大新功能,为实现PC、主机和移动游戏中的完全动态光照效果、最终游戏中光照的精确预览以及美术管线一直到UI的工作流程进行了大幅度的改善。除此之外还引入了WebGL支持,支持无插件发布的浏览器中。 本系统从三维建模开始,到Unity中的资源整合,脚本编写。全面研究了使用Unity3D引擎开发虚拟现实系统的线性工作流。

48、基于这样的流程,深入研究Unity引擎的源码框架,GPU渲染机制,跨平台的工作原理,可以做出十分优秀的作品。本实验抛砖引玉,期待以后自己做出更优秀的作品。 【参考文献】 [1] 肖梦雪.虚拟现实技术与3D立体电影[J].中国传媒科技,2012(6):41-43. [2] 马宏斌,何晓东,王东立.虚拟实验室管理系统的研究[J].信息技术,2005(6):92-93. [3] 干建松.基于Unity3d的室内漫游仿真系统[J].淮阴师范学院学报(自然科学版),2011(6):56-59. [4] 宣雨松.Unity3D游戏开发[M].北京:人民邮电出版社,2012. [5] 黄健柏

49、邹峥嵘,朱学红.虚拟校园及其在校园规划管理中的应用[J].教育信息化,2002(6):78. [6] 李远鑫,蒋海鸥,徐亦飞,徐芝琦.基于Web3D的交互式虚拟社区[J].计算机工程,2011(11):287-290. [7] 韩万江,姜立新.系统工程与软件工程[J].计算机应用,2010(1):212-214. [8] Michelle Menard.Game Development With Unity3d[M]. Delmar CengageLearning,2012. [9] Zhigeng Pan. Virtual reality models automatically

50、generated LOD technology overview [J]. Chinese Journal of Image and Graphics, 1998(4):754-759. [10] Qingwhole Jiang. Summary of development of VR technology abroad [J]. Cruise Missile, 2002(1):27-34. [11] Xiangyu Wang, Phillip S.Dunston, Robert Proctor, Lei Hou, Chung Yin So. Reflections on using

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服