基于Unity3D的三维虚拟电脑组装实验系统开发毕业论文 精品 联系客服

发布时间 : 星期日 文章基于Unity3D的三维虚拟电脑组装实验系统开发毕业论文 精品更新完毕开始阅读1b9d5a3200f69e3143323968011ca300a6c3f68f

基于Unity3D的三维虚拟电脑组装实验系统

图4 为内存芯片指定材质ID

然后用同样的方法选中内存条的侧边,为它指定材质ID号为1,如图5:

图5 为内存条侧面指定材质ID

用这种方法给内存的其它部分也指定ID后,就可以进入材质编辑器,创建一个多维子对象材质,因为总共为内存条指定了5个材质ID,所以需要创建一个包含5个子对象的多维子对象材质,每个子对象材质材质可以单独编辑,漫反射颜色可以纯色也可以贴图,环境光和高光反射根据具体情况进行设置,如图6所示。由于Unity3D引擎也是支持多维子对象材质的,所以在3DS Max中做的这些工作都不会是徒劳的。

第4页

基于Unity3D的三维虚拟电脑组装实验系统

图6 多维子对象材质设置

将用到的贴图保存在一个文件夹里,在导入U3D引擎的时候需要重新进行指定。准备工作做完之后就可以导入U3D引擎了。

2.3 资源导入Unity3D引擎

将三维软件制作的模型导入Unity3D引擎时需要注意一些问题。

首先是X轴向偏转。3DS Max模型导入引擎后将自动有一个绕X轴270度的偏转,在Unity中旋转模型的时候,Y轴的参照方向永远朝上,而X和Z轴则以模型的自身局部坐标为准,所以当模型旋转270度后,Z轴正好与Y轴重合。解决这个问题需要将模型文件导出成为.3ds类型的文件再导入Unity。

其次是材质问题。模型文件导入Unity后,Unity只会自动生成材质球,但是材质的贴图需要手动导入Unity工程然后进行指定。如果模型具有法线贴图或者光照贴图,还需要选择正确的着色器(Shader)才能达到想要的效果。

最后是缩放因子。三维模型的单位需要在前期建模的时候就设置并统一,否则模型出来的大小会不匹配。Unity中的1单位是fbx文件中1单位的100倍,因此如果Unity中1单位定义为1米的话,那么在3DS Max中制作模型的时候,单位就应该设置为1厘米。缩放因子在导入模型时也可以手动设置,如果是以fbx格式的文件导入的模型,可以将模型的缩放因子设置为0.01。

将外部资源导入Unity有三种方式。

第一种方式是存入工程文件夹。创建工程以后,在磁盘上会有一个工程文件夹,找到工程名下的Asset文件夹,将需要的模型资源、贴图资源复制粘贴到这里即可。为了工程结构的简洁明了以及方便查找资源,可以分别为模型和贴图创建自己的文件夹。

第二中方式是在直接拖入到Unity中。在外部文件夹中选中需要导入的资源,直接拖拽

第5页

基于Unity3D的三维虚拟电脑组装实验系统

进Unity的Project窗口中即可。

第三种方式主要是用来导入.unitypackage类型资源。Unitypackage是Unity打包文件生成的一种格式。在Unity的顶部菜单栏找到Asset→Import Package→Custom Package,在本地磁盘找到需要导入的unitypackage文件点击确定就行了,如图7所示。

图7 导入unitypackage文件 图8 模型导入设置

模型导入U3D后需要设置一些参数,正确设置这些参数,模型才能更好的被程序使用。选中导入的模型,在监视器窗口会出现如图8的菜单。其中有几个主要参数需要进行设置:

Scale Factor——前面提到的缩放因子,这里我根据实际模型的匹配需要将它设置为0.004。

Mesh Compression——面片压缩。优化模型的面数从而优化最终程序的性能。 Read/Write Enabled——勾选将使得导入的资源可以在引擎内被读写。 Generate Colliders——生成碰撞器。勾选将会生成匹配模型的碰撞器。

其他的参数因为在这个系统中无需用到,所以按照默认的参数设置就可以了。

3. Unity3D引擎研究

3.1 引擎介绍

Unity3D是一个用于创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的综合型的创作工具,开发者是Unity Technologies,目前最新的稳定版本是2013年12月发布的4.3.1。2005年6月Unity第一个版本1.0.1发布,标志着Unity的诞生。 Unity是一个跨多平台的游戏引擎,利用交互的图形化开发环境作为编辑器提供给开发者,可运行在Windows和Mac OS X下,可发布应用到Windows、Mac OS X、Android、iOS、Web等平台。

第6页

基于Unity3D的三维虚拟电脑组装实验系统

Unity拥有以下主要特性:

层级式的综合开发环境、视觉化编辑,详细的属性编辑器和动态游戏预览。

跨平台支持。可以开发Windows、Mac OS X、iOS、Android、Blakberry、Xbox、Windows Phone等平台的应用程序。

自动资源导入。项目中的资源会被自动导入,并根据资源的改动自动更新。

基于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语言。 内置对Nvdia的PhysX physics engine支持。

游戏脚本是基于Mono的Mono脚本,开发者可以使用JavaScript、C#或Boo语言编写脚本。

音效系统基于OpenAL程序库,可以播放Ogg Vorbis压缩音效,视频采用Theora编码。

3.2 事件函数、脚本执行顺序和生命周期

Unity中的脚本不像常规程序在一个循环中的执行直到任务完成,而是通过调用一些事先声明好的函数,断断续续的将控制权传给一个脚本。当一个函数执行完毕后,控制权便又交回给Unity。这些函数就是事件函数。

下面按照脚本的执行顺序介绍一些常用的Unity事件函数。

Awake()。当前控制脚本实例被装载的时候调用。一般用于初始化整个实例时使用。 Start()。当前控制脚本第一次执行Update之前调用。 Update()。最常用的事件函数,每帧都执行一次。

FixedUpdate()。每固定帧绘制时执行一次,与Update不同的是FixedUpdate是渲染帧执行,当渲染效率地下时,FixedUpdate的调用次数也会跟着下降。

OnEnable()。当脚本被启用时调用。 OnDisable()。当脚本被禁用时调用。

OnDestroy()。当脚本的宿主物体被销毁的时候调用。

Unity中编写的脚本一般都会绑定到一个GameObject上,这个GameObject就是程序中的一个基础元素。一个脚本的生命周期就是和它绑定的GameObjec息息相关的,当程序开始运行的时候,Unity会为每一个场景中活跃的GameObject上的脚本生成一个对象,而当脚本的宿主物体(即脚本所绑定的物体)被销毁的时候,脚本的对象也就不存在了。 Unity的脚本默认都会继承与MonoBehavior基类。不继承于MonoBehavior的类通常用来存放一些全局的数据,它在整个程序运行的过程中都是存在的。

第7页