1、安阳工学院学报Journal of Anyang Institute of Technology Vol.22 No.2(Gen.No.122)Mar.,2023第22卷第2期(总第122期)2023 年 3 月DOI:10.19329/ki.1673-2928.2023.02.009基于 Unity3D 的汽车起动机虚拟拆装实训系统开发甘志梅,高 伟,魏志祥,汪清松,刘宏锋(南昌工程学院 机械工程学院,南昌 330099)摘 要:随着高校人才培养方案的优化调整,高校普遍存在实践教学资源不足的问题,虚拟实验技术应运而生。利用CATIA 软件建立三维模型,3DMax 软件进行材质渲染,Unity
2、3D 引擎创建三维虚拟交互环境,C#程序设计语言编写控制脚本,开发了汽车起动机虚拟拆装实训系统。系统通用性强,可方便拓展,具有较好的应用前景。关键词:虚拟拆装;Unity3D;起动机 中图分类号:TP391.9 文献标志码:A 文章编号:1673-2928(2023)02-0048-05 随着高等教育发展和高校教学改革的不断深入,各高校不断调整和优化人才培养方案,普遍压缩了课程学时,并增大了实践学时比重1-3,以适应教育部提出的“厚基础、宽口径、广适应”的人才培养模式4,为社会培养高质量人才。高校车辆工程专业学生必须理论联系实际,进行大量车辆零部件拆装实验5。随着实践学时的增大,汽车技术的加速
3、更新换代,部分高校出现了实验室建设经费不足缺少部分实验设备、实验设备精度高拆卸后无法复原、实验场地不足等问题,无法满足教学需求。随着虚拟现实技术和移动互联网技术的发展,很多教育机构开发了虚拟仿真实验系统进行实践教学,很好地克服了实践教学过程中的诸多问题。Unity3D 是一款游戏开发工具,支持平台包括手机、平板电脑、个人计算机(PC)、增强现实和虚拟现实设备,采用通用的 C#或 JAVA语言,简单易用,近年来广泛应用于虚拟教学软件的开发。王文锋等6应用 Unity3D 软件开发了基于自然手势交互的车辆虚拟拆装实验系统,能够最大程度地模拟现场车辆拆装过程,避免实践场地、时间不足的问题。刘立妍等7
4、借助 CATIA、Unity3D 开发了汽车转向系统虚拟装配教学平台,实现了转向系统交互装配。冯桂珍等8使用 Unity3D 软件开发了减速器虚拟拆装实验平台,能进行几类典型的减速器的虚拟拆装。本 研 究 以 汽 车 起 动 机 为 研 究 对 象,利用 Unity3D 为开发引擎,结合使用 CATIA、3DMax 软件进行起动机三维建模,利用 C#编程语言进行界面交互逻辑控制,开发了汽车起动机虚拟拆装实训系统。1 起动机结构与拆装分析起动机的作用是将电能转化为机械能,带动发动机从静止状态过渡到工作状态,是内燃机汽车不可缺少的组成部件。起动机的结构主要包括:前端盖、电刷组件、磁极、电枢、电磁开
5、关、减速机构、单向离合器、后端盖等。从起动机的结构上看,其零部件主要是从后端盖向右展开,如图1所示。其拆装过程分 2 条轴线,先拆轴线 1上的零件,再拆轴线 2上的零件,除轴线 1上的固定螺栓向左拆出,其余零件均应向右依次拆出。图 1 起动机结构组成及拆卸轴线收稿日期:2022-11-18作者简介:甘志梅(1982),女,江西丰城人,讲师,硕士,研究方向为汽车 CAD/CAE、虚拟现实研究。第二期492 虚拟拆装实训系统的设计与实现2.1 系统结构起动机拆装是汽车电器课程一个重要实践项目,实训目的是使学生了解起动机结构组成、工作原理、拆装顺序与方法,学会使用常用的拆装工具,对培养学生工程意识、
6、动手操作能力、实践创新能力具有重要意义。根据实训教学目标,本虚拟拆装实训系统结构如图 2 所示。系统包含账号管理、零部件介绍、拓展与补充、自动拆装演示、手动交互拆装操作等模块。图 2 系统结构框图2.2 总体开发流程基于 Unity3D 的虚拟拆装实训系统开发主要分为 3 个阶段。第一个阶段是素材准备:利用三维建模软件 CATIA 制作真实的起动机三维几何模型,导入 3DMax 进行模型材质渲染,将经过渲染处理的三维几何模型导出为 Unity3D 支持的 fbx格式文件;第二阶段是系统的交互功能设计,将三维几何模型导入 Unity3D 软件中,使用该软件的 UGUI 系统设计人机交互界面、利用
7、 C#编写交互程序;最后阶段是通过系统发布,可发布为Android 移动平台或 Windows 平台。2.3 系统动态交互功能实现2.3.1 资源导入起动机整体包含了许多形状复杂的零件,因此,在制作模型的过程中,在确保真实性的前提下,要根据实际拆装实验的拆装程度对模型进行合理简化,将模型中看不到又不需要单独拆卸的零件删除或将多个零件简化成外观和实物一致的单个零件,这样可以提高系统开发效率,也能避免模型数据量过大,影响系统运行效率。在 Unity3D 的 Project 面 板 中 的 Assets 工 程文件目录下创建几个单独的文件夹,分别存放导入的模型、图片、声音、视频等文件。将经过渲染处理
8、的三维模型另存为 fbx 格式并直接拖入Unity3D 的 Project 面板相应文件夹中,继续拖入和模型交互有关的声音、展示图片、视频等文件至 Project 面板相应文件夹中,完成资源的导入。2.3.2 场景搭建通过 File New Scene 创建场景,利用 Unity UGUI 创建交互界面,根据需要搭建多个场景,添加场景切换脚本,运用 SceneManager.LoadScene功能进行场景管理,实现多场景之间的切换。图 3 为起动机虚拟拆装实训系统零部件介绍场景。点击界面左侧的按钮可切换到不同的零部件介绍场景;点击“退出”按钮可返回主界面,如图 4 所示;点击“音频讲解”按钮将
9、播放零部件介绍音频;点击“爆炸图”按钮可在场景中部的模型显示区显示零部件的分解图,同时模型区可以通过鼠标和键盘操作进行缩放、旋转、移动。图 3 场景的设计过程:图 3 零部件介绍场景图 4 系统主界面甘志梅,高 伟,魏志祥,等:基于 Unity3D 的汽车起动机虚拟拆装实训系统开发2023 年安阳工学院学报50在 Hierarchy 面板点击 Create/UI/Canvas 新建画布,大小与场景界面一致;Create/UI/Image创建画布背景,更改 Image 颜色或给 Image 设置Sprite 类型的纹理。点击 Create/UI/Button 创建界面按钮,给Button 设置
10、Sprite 类型的纹理,使按钮具有美观的外观,更改按钮的 Text,使每个按钮上显示图3 所示的文字。Create/UI/Image 在界面左下角插入图片,Image 的纹理 Sprite 为零部件的图片;Create/UI/Text 在界面右下角插入文本,输入相应的零部件介绍内容。Create/Create Empty 在 Hierarchy 面板中新建 1 个空物体 Starter,将起动机相应零部件模型拖入空物体中,作为空物体的子对象,调整模型的位置和大小,使模型显示在图 3 中部的模型区。2.3.3 界面交互和多媒体功能界面交互:利用 UGUI 制作的按钮要实现相应的功能,还需要相应
11、脚本支持。以图 3 左侧磁极场景切换和退出按钮为例,在 Hierarchy 面板创建 1 个空物体并挂载上名为 GameManger 的C#脚本,通过编写相应的代码,实现各种场景的切换(SceneManager.LoadScene)和关闭系统(Application.Quit)操作。界面上的按钮通过 On Click()进行鼠标点击监控并调用 GameManger 里相应的函数即可完成相应的功能。多媒体展示:为了丰富实训内容,使学生更好地掌握起动机的结构原理知识,可给场景添加上音频讲解或视频演示。图3中的“音频讲解”play_bth 按钮实现过程如下:给 Hierarchy 面板中的空物体 S
12、tarter 添加 Audio Source 组件,将相应的音频文件拖入 Audio Source 组件的 Audio Clip中,编写脚本实现按钮点击监听 play_bth.onClick.AddListener(监听函数),在监听函数中实现点击播放 audio_source.Play(),再次点击停止 audio_source.Stop()功能。视频演示可通过下面方式添加:在场景的Canvas 上创建 RawImage,给 RawImage 添加 Video Player、Audio Source 组件,将相应的视频文件拖入 Video Player 组件的 Source 中,将 Audi
13、o Source组件拖入 Video Player 组件的 Audio Source 中,否则无法播放声音,编写脚本实现按钮点击监听*_bth.onClick.AddListener(监听函数),在监听函数中实现播放 videoPlayer.Play()、暂停 videoPlayer.Pause()、停止 videoPlayer.Stop()功能。2.3.4 模型动态预览通过鼠标操作对模型进行旋转和缩放、通过键盘操作实现模型的上下左右移动,从而可以多方位任意角度查看模型的组成、结构特点、装配关系。系统通过在摄像机 camera 上增加角色控制组件 CharacterController 来模拟
14、玩家,编写脚本挂载 在 camera 上 通 过 Input.GetAxis(Horizontal)、Input.GetAxis(Vertical)指令获得键盘上 ADWS键是否按下来控制玩家的移动,改变模型与玩家的相对位置,从而可以改变模型在屏幕中的显示位置,实现模型的上下左右移动;通过检测鼠标中键的滚动 Input.GetAxis(Mouse ScrollWheel)控制摄像相机的视野 Camera.main.fieldOfView 的大小,从而控制模型缩放。通 过 在 模 型 的 父 对 象 Starter 上 挂 载 上控 制 脚 本,检 测 鼠 标 右 键 是 否 按 住 Input
15、.GetMouseButton(1),从而控制模型父对象的方位transform.rotation,子对象的方位自动跟随父对应一起改变,从而实现模型的旋转。2.3.5 虚拟拆装功能系统具有自动拆装、手动交互拆装 2 种功能场景。自动拆装演示正确的拆装过程、拆装注意事项,使学生了解起动机结构组成、掌握正确的拆装顺序;手动交互拆装场景需要用户通过鼠标拖拽零部件,实现拆卸和安装,让学生自己动手熟悉起动机的拆装操作。把起动机模型拖入 Hierarchy 面板的空物体 Starter 中,作为其子对象,调整好 Starter 位置 Position 和方位 Rotation;在需要同时拆装的零部件间建立
16、父子关系,形成 1 个拆装部件;把部件名称修改成真实的部件名;根据起动机拆装顺序调整各部件在 Hierarchy 面板中的顺序;按Hierarchy 面板中部件的放置顺序依次更改各部件的 Tag 为 0、1、2;定义变量 _order 记录拆卸序号,_order 与零部件的 Tag 比较判断拆装顺序是否正确;编写循环程序依次修改每个部件的位置 Position 至鼠标位置 Input.mousePosition,或设定好的位置,即可完成拆卸功能。通过以上方法无论模型包含多少个部件都可通过一段简单的程序代码实现拆装,而且程序代码具有通用性,换机械产品模型后只要完成上面几个步骤就可以开发成相应产品的拆装实训系统。手动拆装流程图见图 5。自动拆装:先设置 1 个数组存放各部件拆卸终 点 end_pos 位 置,使 用 Unity3D 的 DOTween插件设置动画序列 sequence,实现各部件依次从起点位置在给定的时间 t 运动到终点位置 end_posi,当按下拆卸按钮时正向播放拆卸动画,完第二期51成自动拆卸;拆卸完成按下自动装配按钮时,反向播放动画,完成自动装配。其关键语句如下:s