1 研究目的与意义
Unity3D作为一款跨平台的游戏开发引擎,有着友好的操作界面和强大的性能,利用Unity3D模拟计算机硬件的组装过程,认识该软件,学习它的操作方法,熟悉基本控件,十分有效。同时对计算机硬件组装的模拟,能更好地认识计算机硬件,掌握组装电脑的一些基本技能不仅能培养动手能力,同时也能巩固自己的理论知识,之后加以运用。通过本次项目的研究,可以培养研究能力、创新能力、加强对所学知识的运用和实践。在实践中,了解事物的本质,培养研究能力、创新能力、对知识的运用和实践,从而为今后的学习奠定坚实的基础。
2 研究内容与总体方案
2.1研究内容
本次项目是利用Unity3D引擎模拟计算机硬件的组装过程,具体的研究内容包括认识组成计算机的各个部件、熟悉计算机组装的步骤以及各个部件所在的位置、了解Unity3D的界面及其组件使用、学会脚本编写与项目设计和一些API的应用、学习一些简单模型的建模方法、完成计算机的硬件组装。
2.2总体方案
首先了解计算机组成的各个组件、以及计算机的组装步骤。在3DMax上做出计算机各个硬件的模型,然后将这些模型导入到Unity3D中。导入后在Unity中创建场景,编写脚本来实现各个功能。该计算机组装系统主要分为主界面模块、组件展示界面、组装界面三个模块。创建三个场景,主场景展示项目名称姓名等信息,组件介绍场景展示每个部件的说明及模型细节,装机界面用来演示装机界面。最后,在主界面通过按钮切换可以到各个硬件展示界面,点击装机演示,通过拖动部件到合适位置完成计算机的组装,计算机装机演示完成。
3 研究方法
3.1计算机硬件模型创建及组装步骤
3.1.1 3DMax多边形建模技术
计算机组装所需要的主板、内存条、显卡、电源、机箱、显示器等都是比较规则的几何体,可以由基本的几何体进行变形和细分,最后组合得到。因此模型创建采用多边形建模技术,它基于简单的长方体、球体、圆柱体和其它的一些几何体通过添加点和线来完成模型的创建。对于精度要求较低、形状比较规则的物体,使用多边形建模技术可以极大地提高工作效率。
3.1.2计算机硬件模型创建
建模时,仔细观察各个硬件的结构,将它们拆分成多个部分来进行创建,将它们各个零件转换为规则的几何体,最后将各个部分整合成为一个完整的模型。例如,主板上有一些复杂的电阻和插孔,这些可以用一些简单的圆柱体来替代,开关与接口可以由长方体来替代。将主板上的一些复杂的零件拆分为各种简单的几何体后进行组装,之后便会得到一个基本的模型。
硬盘基本模型 CPU基本模型
为了更加真实,我们需要在模型加上一些标签、材质。采用UV拆分与材质贴图。UV定义了一张二维图片以何种方式贴到三维对象的表面上。制作时,采用修改器为模型选择贴图方式,如平面映射、柱面映射、球面映射等。当遇到复杂模型时,需要手动来拆解UV。当进行UV拆解时,碎片要尽可能少一些,这样贴图上的缝隙就会少。同时要避免贴图坐标的重合,这将会导致贴图部分分配不到正确的图像信息。在建模时,不同的部分可能材质不同,比如显示器是显示屏和底座是不一样的材质,在显示屏的边框还要加上logo,因此,我们需要用多维子对象材质,在建模时,给每个子对象分配好材质ID,就可以将子材质赋予指定的子模型部件。以内存条为例:
首先在面板上选中内存条的使用芯片,在右侧的修改器栏找到多边形材质ID组,设置好TD号,利用这种办法给内存条的其它部分也指定好ID,进入材质编辑器,创建一个多维子对象材质,创建几个材质,就需要创建几个包含子对象的多维子对象材质,每个子对象材质可以单独编辑,然后贴图。同时,Unity3D中也支持多维子对象材质,在导入后,可以直接使用。
显卡 CPU风扇
机箱 内存条
电源 主板
在给建好的基模型添加材质时,将用到的贴图保存在一个文件夹里,在导入Unity3D引擎的时候需要重新进行指定,这些准备工作做好之后,就可以将模型导入Unity中了。
计算机组装步骤
3.2模型资源导入Unity3D引擎
将资源存入工程文件夹。在创建的工程下的Asset文件夹中,将资源复制粘贴到该文件夹下面或者将资源直接拖拽到Project窗口中。其中再导入模型时,需要把物体的世界坐标转换成屏幕坐标,设置物体位置到鼠标位置。其次在模型导入时,模型没有材质,但是在Unity中会自动生成材质球,需要将材质的贴图手动导入到过程中。此外,需要注意导入的资源格式是fbx格式文件。
硬件模型导入Unity
3.3场景搭建与切换
通过File→New Scene创建场景,用Unity UGUI创建交互界面,当搭建了多个场景时,通过场景名来加载,使用场景处理器来实现场景的切换。在切换场景时场景必须在build窗口中存在,再根据脚本跳转切换场景,使用的方法是SceneManager.LoadScene("")。
例:using UnityEngine;
using UnityEngine.SceneManagement;
void Start()
{
Button btn_return = this. GetComponent<Button> ();