阎汉生, 曾 峰, 龙宇辉
(1. 广东工贸职业技术学院, 广州 510510; 2. 华南理工大学 机械与汽车工程学院, 广州 510640)
基于Unity3D的产品结构认知虚拟实验室构建
阎汉生1,2, 曾 峰1, 龙宇辉1
(1. 广东工贸职业技术学院, 广州 510510; 2. 华南理工大学 机械与汽车工程学院, 广州 510640)
针对高校机械类专业实验教学中产品结构认知模型不足的问题,基于Unity3D平台,选取了多个常见实物产品,采用Rhino、Creo等软件为产品建模工具,结合C#语言实现交互功能,通过HTML网页整合,开发出互联网上的产品结构认知虚拟实验室。依托广东工贸职业技术学院工业设计省级实训基地,综合多种先进技术,实现了在PC端和移动终端多平台进行浏览操作,虚拟拆装产品,深入反复学习产品结构的功能,显著提升了学生学习的兴趣和人才培养的效果。教师可以根据课程需要定制教学结构模型,显著节约实验仪器设备的经费投入,增加了学生实验在时间和空间上的自由度,具有较好的研究价值和应用前景。
产品结构; 虚拟拆卸; 虚拟实验室
随着高等教育发展和专业建设的步伐加快,部分高校实验教学资源相对不足,无法满足学生需求[1]。尤其机械类专业学生,也包括产品设计专业学生,需要对大量的工业产品和机械设备进行拆装认知,积累对机械设备设计和产品设计在结构方面的经验[2-3]。针对上述问题,建设互联网上交互操作的虚拟实验室,是一个有效又经济的解决方法[4]。目前虚拟现实技术和移动互联网技术越来越成熟,不少的商业或教育机构已开始采用各种相关技术进行展示和教学,其中主要虚拟交互工具有Unity3D、cult3D、EON Studio、VRML等[5-7]。
其中,Unity3D是由Unity Technologies开发的一个多平台的综合型游戏开发工具,由于其易用性和跨平台性等诸多优点,近年来Unity3D平台受到广泛关注,使用Unity3D开发的虚拟现实产品逐渐增多。中国科技大学、华南理工大学、华中师范大学建立了基于Unity的虚拟实验室,用于几何光学、机械结构、化学实验等[8]。另外,烟台生产力促进中心、临矿集团、深圳学车新电子科技公司分别利用Unity技术构建用于产品展销、船舶液压、模拟驾驶等方面的虚拟实验平台[9-10]。本文将研究以Unity3D技术为基础的,能在互联网交互浏览的,面向产品结构认知的虚拟实验平台。
构成该虚拟系统需要的资源主要有:基于产品实物测绘建模的高精度模型、用户界面资源、产品信息资源、Unity3D交互模块、用于嵌入Unity3D交互模块的HTML网页。建设的主要流程是:通过对真实的工业产品进行实物测绘,采用主流三维软件建模,再利用Unity3D制作产品模型虚拟拆装模块,最后嵌入到网页当中,通过浏览器访问网页,对产品结构进行虚拟拆装、认知学习[11]。由平台流程图1可见,虚拟实验室的核心技术是在Unity3D编辑器中生成交互文件。
图1 虚拟平台搭建流程
2.1 Unity3D模块制作流程
虚拟实验室服务对象为高校机械类学生和教师,所以选取了机械工具和日用产品两类常见的产品作为建模对象。广东工贸职业技术学院工业设计实训室2014年成为省级高职实训基地建设项目,配备了大量的实物产品模型、测绘工具和专业软件。初期选择了齿轮减速器、注塑模具、挂烫机、搅拌机、加湿器5个产品,以后可根据需要添加模型。各类产品的交互模块制作流程一样,如图2所示,由建模、整理信息、文件导入、场景搭建、界面设置、脚本编写、功能优化与发布等步骤组成[12]。现以减速器为例,说明具体步骤。
图2 交互模块开发流程
2.2 资源场景和用户界面
(1) 资源导入和场景搭建。模型主要在Creo和Rhino软件中建模,三维模型制作完毕,在3ds max软件中调整好Z轴方向后转存为fbx格式文件[13]。然后在Unity3D的Project面板中的Assets工程文件目录下创建Modles文件夹,将.fbx文件放入其中,Unity将会自动识别。继续添加和模型交互有关的声音、模型贴图、展示图片等文件至工程目录,并创建相应文件夹,方便管理。
通过File→NewScene创建场景,将Assets工程文件目录下Modles文件夹中的模型放入Scene窗口当中,在Hierarchy 面板可管理添加至场景的模型,Game窗口可见模型实时显示状态,如图3所示。Unity的编辑视窗和输出窗口的统一使得所见即所得,高效便捷。
图3 Unity3D编辑器里模型实时显示
(2) 用户界面。使用NGUI创建UI界面以及按钮,在start场景下,通过NGUI→Creat→2D UI创建UI Root。在Hierarchy面板可见,UI Root是NGUI最重要的组件,其他UI元素包括按钮、界面等都是在以它为根的GameObject树分支。UI Root包含UIRoot和UIPanel脚本[14],前者提供了整个UI界面的高度以及缩放比例,后者提供了界面整体的透明度、深度等的编辑功能。
以“齿轮减速器模拟拆卸”界面的按钮为例,在UIRoot下,通过Scene→Create→Sprite创建图片,在Scene面板中可见,更改Sprite名称为Button_yanshi。在Inspector面板中更改图片,替换Button图片使其有美观的按钮外观。添加UIButton组件使其具有按钮的点击功能。最后在Button_anshi下通过Create→Lable→Child向按钮添加文本信息子对象,更改Label文本。创建的界面如图4所示。
图4 减速器虚拟拆装UI设计
2.3 界面交互和多媒体功能
(1) 界面按钮的交互功能。利用NGUI制作的按钮仅仅具有按钮的外观,如需执行相应的按钮功能,还需要相应的程序支持。下面以场景切换和退出按钮为例,创建名为SceneChange的C#脚本,实现“动画演示”“产品拆解”“产品详解”等按钮的场景切换和关闭窗口功能。该脚本通过OnClick()函数进行按钮的鼠标点击监控、Application.LoadLevel()函数进行场景的切换加载、Application.Quit()函数实现Unity3D窗口程序的关闭退出。
将脚本拖放至摄像机对象上,将脚本点击事件和相关按钮关联,即可实现按钮的场景切换和窗口的关闭功能。部分核心代码如下:
public void OnDonghuayanshiButtonClick(){ //当单击动画演示按钮
Application.LoadLevel("yanshi");} //切换至“yanshi”场景
public void OnBackButtonClick(){ //当单击返回按钮
Application.LoadLevel("start");} //切换至“start”场景
public void OnQuitButtonClick(){ //当单击退出按钮时
Application.Quit ();} //程序退出窗口关闭
(2) 添加多媒体信息。为达到逼真的展示效果和更好的用户体验,可以为界面中的按钮和三维模型添加合适的音效,这样点击时将有相应的声音反馈,如螺丝拧动的声音、盖子开合的声音等[15]。Unity3D自身不带声音音效文件,需要导入外部资源。点击按钮的声音通过NGUI的UIPlaySound脚本组件添加执行,将声音文件拖放至组件当中即可。点击三维模型的声音文件通过Compent→Audio→Audio Source加载,编写AudioPlay脚本执行点击播放,脚本挂载至摄像机对象。
部分核心代码如下:
Var ray = Camera.main.ScreenPointToRay(Input.mousePosition); //鼠标点击发射射线碰撞,
RaycastHit hit;
if (Physics.Raycast(ray, out rayhit)) {
if(hit.transform.GameObject) { //判断射线碰撞的对象
GameObject.GetCompoent
audio.Play();}} //播放声音
2.4 模型交互功能
实际应用中,交互操作非常复杂,种类也很多,包括场景视角的控制、点击拆卸动画的制作与交互、拖曳拆卸的功能实现、零件高亮着色、实时信息反馈等。其中在虚拟拆卸中应用最广操作有两类,分别是鼠标点击拆卸功能和点击拖曳拆卸功能。
(1) 鼠标点击拆卸功能。实现鼠标点击拆卸功能即:通过Unity3d的动画编辑器制作产品模型拆卸运动的帧动画,使用脚本判断用户对各个部件的单击操作,必要时播放被单击部件所挂载的动作,从而达到虚拟拆卸的交互目的。具体实现分为以下两个部分:① 帧动画的制作。使用MeshCollider组件判断模型是否响应点击事件,使用Animation组件控制帧动画编辑。选中模型零件,通过window→Animation打开动画编辑器,添加Position位置控制的动画曲线,零秒关键帧处保持零件在初始默认位置,在第t s关键帧处设置零件拆卸后位置坐标。动画播放时零件模型将在t秒内移动到所设置的位置处。② 交互控制。摄像机对象添加AnimationManger脚本,再将模型相关帧动画文件与脚本关联,实现对模型拆卸动作的播放控制。此脚本是通过Raycheck函数进行射线碰撞检测,Animation.Play()函数控制动画播放,逻辑是当满足鼠标左键单击且点击的物件为模型部件,则播放该模型部件拆卸动作帧动画。部分核心代码如下:
void RayCheck(){ //单击模型零件播放动画
Ray ray= Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit)){
ModelHelp hitGo= hit.collider.gameObject.GetComponent
if (hitGo!=null){
if (!m_ModelList[hitGo.ID].IsPlaying&&!CheckIsHavPlay(hitGo.ID)){ //播放动画
m_ModelList[hitGo.ID].GameObject.GetComponent
图5所示为减速器抵卸前后的对比。其中:图5(a)表示减速器未拆卸时点选一颗螺钉,图5(b)表示拆卸出一颗螺钉,图5(c)表示完全拆开后的效果。需要注意的时,相邻零件在拆卸时,是有先后顺序的,这种顺序可以由两种不同的方法实现,第1种方法是对相邻的零件ID值做判断,某个零件拆卸时先检测应该在其之前拆卸的零件是否已拆卸,这种方法精确但编程工作量大,需预先设置大量零件ID之间的关系。第2种方法是借助Unity3D的碰撞检测,使得内侧零件不能先于外侧零件拆出,这种方法简单,通常用于游戏中的物体接触和碰撞判断,但对机械零件的包围边界判断精度不够,对精密的机械装配无法适用。本文研究中主要采用了第1种方法,此处不再展开详述。
(a)
图5 减速器拆卸前后对比
(2) 点击拖曳拆卸功能。上述点击后播放动画展示拆卸功能的方法能够初步实现对产品的虚拟拆卸,达到观察学习产品内部结构的目的,具有一定的交互效果。但用户体验不太理想,沉浸感不足,优秀的虚拟交互应该是操作和反馈实时产生,时空上不能有明显间隔[16]。点击拖曳拆卸功能是指使用鼠标点击想拆卸的零件,按下鼠标左键后直接拖动零件模型进行拆卸,鼠标拖曳的位置即为零件实时摆放位置,这种操作方式能让用户有更直观、更真实的拆卸体验。
以拆卸螺钉为例,首先创建DragMove脚本,该脚本程序通过GetMouseButtonDown()检测鼠标是否按下,通过按下时的鼠标位置和移动后的鼠标位置计算出鼠标位移量,再通过eulerAngles(欧拉角)进行角度的转换更新螺钉旋转位置。之后使用transform.Position进行模型位移位置的置换,将螺钉移动到鼠标所在的位置。从而实现点击模型并拖动鼠标,模型边旋转边移动的效果,形象地模拟了螺钉旋转拧出的过程。部分核心代码如下:
void Update () {
if (Input.GetMouseButtonDown (0)){ // 鼠标点击时候执行检测是否点在cube上
if (m_bIsCollision) {
Vector3 temp = Input.mousePosition - m_vTempMousePos; // 两帧鼠标位置之差为移动距离
m_vTempMousePos = Input.mousePosition;
m_rot.eulerAngles = new Vector3(m_rot.eulerAngles.x, // 实时更新cube旋转角度
m_rot.eulerAngles.y - temp.x,
m_rot.eulerAngles.z);
m_cubes.transform.localRotation = m_rot[m_Cube];
m_cubes.transform.localPosition=newVector3(m_cubes.transform.localPosition.x+2f/360) *temp.x, // 实时更新cube位移位置
m_cubes.transform.localPosition.y, m_cubes.transform.localPosition.z);}}}
(1) 界面的优化。由于该虚拟实验室需要适应不同分辨率设备的访问操作,用户界面需要针对不同比例、不同分辨率的设备进行调整。根据目前主流PC和移动设备的显示界面分析,调整用户界面大小最大值为2 560×1 440,最小值为800×480,能够适应大多数显示器进行。为按钮等界面元素添加Anchor,设置Anchor上下左右对齐,按钮元素可随着界面比例的改变自动适应调整相对于其他UI元素的位置,保持界面的一致美观。
(2) 其他方面的优化。多媒体资源的优化包括声音和拆解动画匹配,逐一调整声音播放和动画播放时间,达到动画和声音同时播放。脚本的优化主要是调整脚本的逻辑,提高运行效率,减少Update方法使用,因为该方法为每帧执行,对电脑资源耗费较多。
Unity3d文件支持本地PC、远程Web、Android、IOS等多种平台运行。点击FileBuild执行创建程序,弹出设置界面,本项目需要选择Platform WebPlayer发布网页文件,勾选OfflineDeployment选项实现脱机状态下运行,将已建的场景全部添加至Scenes In Build当中,点击Build打包发布网页文件[17]。最后将发布的网页文件嵌入到虚拟实验室网页中即可在互联网访问,实现虚拟交互学习。图6为虚拟实验室网站运行截图,其中:图6(a)为实验室栏目导航和基本信息,图6(b)为目前可选的虚拟拆卸产品列表,图6(c)为齿轮减速器交互窗口,图6(d)为手机端访问界面。
(a)
(c)(d)
图6 虚拟实验室网站截图
采用先进的Unity3D技术,导入Creo和Rhino创建的产品模型,使用C#编写交互脚本,构建出一个产品结构认知虚拟实验室,在对多个产品进行拆装测绘和三维建模的基础上制作了虚拟交互模块,并发布在互联网上,供学生随时随地学习,能有效缓解高校机械类产品结构实验设备紧缺问题,学生反映良好,同时也为相关虚拟现实项目和数字化仿真运用提供参考。
[1] 杨雪松.基于Unity3D的发动机虚拟拆装系统研究[J].机械,2016(1): 32-35.
[2] 钟东阶,蒋国璋.机械基础实验教学改革的探索[J].实验室研究与探索, 2013,32(2): 146-169.
[3] 王洪欣,徐桂云.建设机械设计认知实验培养学生结构设计能力[J].实验技术与管理, 2014(6): 15-18.
[4] 汪 昭,魏 江,徐文娟.Unity3D在虚拟物理实验设计中的应用[J].常熟理工学院学报(教育科学),2015(6): 112-115.
[5] 孙红春,胥 勇,程桂娟.基于Cult3D技术的工程测试技术实例虚拟仿真研究[J].中国现代教育装备,2015(4): 15-17.
[6] 罗陆锋,文 领,徐超辉.基于EON Studio模具虚拟拆装系统开发[J].煤矿机械,2012(6): 263-265.
[7] 巫红霞.基于VRML的虚拟实验室研究[J].苏州市职业大学学报,2016(6): 34-39.
[8] 朱 柱.基于Unity3D的虚拟实验系统设计与应用研究[D].武汉:华中师范大学, 2015:3-4.
[9] 吕文梅,宋代广.基于Unity3D与3Dmax的虚拟船舶液压系统三维模型展示[J].软件导刊,2014(6): 74-76.
[10] 杨亚联,王 磊,杨 果,等.人在环路模拟驾驶仿真实验系统研发[J].重庆大学学报,2015(8): 38-44.
[11] 蒋耘晨.虚拟实验室技术[M].北京:北京理工大学出版社,2011.
[12] Sergey Mohov. Practical game design with unity and playmaker[M]. Birmingham:Packt Publishing,2013.
[13] Ramasundaram V, Grunwald S, Mangeot A,etal. Development of an environmental virtual field laboratory [J].Computers & Education,2015,45(1): 21-34.
[14] 高雪峰.Unity 3D NGUI实战教程[M].北京:人民邮电出版社,2015.
[15] 张典华,陈一民,李 磊.基于Unity3D的多平台三维空战游戏的开发[J].计算机技术与发展,2014(1): 192-195.
[16] 郭宇承,古学静,石 琳.虚拟现实与交互设计[M].武汉:武汉大学出版社,2015.
[17] 马 瑞.基于Unity3D的多平台三维虚拟数字校园的设计与实现[J].蚌埠学院学报, 2011(2):13-16.
Construction of Virtual Lab for Product Structure Cognition Based on Unity3D
YAN Hansheng1,2, ZENG Feng1, LONG Yuhui1
(1. Guangdong College of Industry and Commerce, Guangzhou 510510, China; 2. School of Mechanical and Automotive Engineering, South China University of Technology, Guangzhou 510640, China)
Because of the insufficiency of product structure cognition model for mechanics experiment teaching in colleges and universities, based on Unity3D platform, using Rhino and Creo for three-dimensional modeling, an Internet virtual lab for product cognition was established. Several common physical products were selected as cases, C# was used to program interactive function and integrate HTML pages. Relying on the industry design provincial training base in the Guangdong College of Industry and Commerce, the lab integrated a variety of advanced technology, virtual disassembling products could be operated on PC and mobile terminal platforms. The students’ interest and training effect are significantly improved. Teaching structure models can be custom-made according to course demand for teachers. The lab significantly saves investment on experimental instruments and equipment, and increases the freedom of the students’ experiments in time and space. As a result, the new method has a good research value and application prospect.
product structure; virtual disassembly; virtual laboratory
2017-11-10
广东省高职教育教学改革项目(GDJG2015026);2014年广东省高职教育大学生创新创业训练计划项目(粤教高函[2015]24号);广东工贸职业技术学院科研项目(2014-Z-06)
阎汉生(1978-),男,湖北宜昌人,硕士,讲师,研究方向:数字化设计与制造、工业设计。
Tel.: 18028622402; E-mail: yhs7812@163.com
TP 391.9
A
1006-7167(2017)08-0117-05