在线试读

get_product_contenthtml
第5章虚拟交互式教学辅助系统


随着多媒体技术的发展,传统的课堂教学模式较为单一,一些科目教具准备较为困难,不能多种形式、多角度地给学生提供形象思维的启迪,在一定程度上限制了学生的开拓性思维;学生只是局限于教室内听课,学习环境枯燥,教学模式固定,教学内容老套,导致学生失去探索知识的欲望。而多媒体教学图文并茂、视听兼顾、交互性强、信息量大、灵活性强,激发了学生的兴趣,扩大了课堂的容量,化抽象为直观,创设各种情境,能突出教学重难点,起到了不可估量的作用。根据自己教学内容的特点,将传统的课堂教学模式与多媒体教学有机结合起来,才能取得理想的教学效果。为了唤起学生的兴趣,培养学生独立思考和自主学习的能力,世界各国都在尝试把新技术融入学生的培养过程中,比如多媒体技术、网络技术等建立新的教学模式。但对于知识面较广、知识结构松散、知识点丰富的课程,多媒体教学与网络仍然不能满足教师“传道授业”需求,更不能满足学生对知识的渴望。在此背景下,虚拟现实技术在教学领域的应用,逐渐成为人们所关注的热点。本章把虚拟现实技术引入到教学辅助设计中,开发了一套基于Unity3D的教学辅助系统,并详细论述了虚拟现实技术在教学培训中的应用技术,使用Unity 3D引擎作为开发工具,使用C#作为开发语言,实现飞机引擎虚拟拆卸和组装的功能,为虚拟现实技术在教育教学中的应用提供了技术支撑。5.1飞机引擎拆装工程背景在现代高精度机械化的工厂模式下生产的机械产品,比如船舶、飞机、火箭等,其工程结构和工作原理都非常复杂。例如,本章的飞机涡轮发动机作为上述现代化机械的“心脏”,具有精度高、结构复杂的特点。如果让刚进入这个行业的学员去组装和拆卸发动机,无疑会给这些初学者带来很大的困难。那么如何解决这些困难呢?设计一个飞机引擎拆装系统教学辅助系统,可以通过VR技术来实现虚拟拆装过程。通过虚拟教学辅助系统,学员已经很熟悉飞机引擎的三维结构,再去接触实际系统就不会感到陌生,方便刚刚踏入飞行行业的学员快速掌握整个飞机引擎的三维结构和组装过程。5.2飞机引擎三维拆装交互系统概述飞机引擎三维拆装交互系统模拟了一个发动机的拆卸过程。此过程能够让用户对于发动机的拆卸具有模拟动手操作的功能,使其简单明确,并且极大地避免了传统教学模式下的设备昂贵等缺陷,相对于说明类文字和静态图片,更能够既准确又直观地展现航空发动机各级别设备拆除和安装的过程。其中,包括展示、互动、数据传输和指令传输。主要展示一部航天发动机的模拟拆装过程,用户可以单击按钮观看和暂停观看发动机自动拆卸视频,也可以按顺序依次拆卸或者安装,用户单击发动机上的零件,按照一定顺序了解拆卸的功能。通过视频和练习加深印象,对发动机的拆装过程有一个整体认识。虚拟现实理论与实践第5章虚拟交互式教学辅助系统5.2.1系统组成飞机引擎三维拆装虚拟交互系统主要包括3类学习系统: 自学类、练习类与考试类,每个子系统受终端软件控制,在用户操作时根据需要展示。由于飞机内部结构是行业保密内容,不能在本书中展示,本书使用模拟的模型代替。另外,下面所提到的终端软件指的是TCP调试助手。1. 软件组成飞机引擎三维拆装虚拟交互系统在开发过程中,使用的软件环境是PureMVC经典的架构模式,由Model模型加载模块、Model声音加载模块、Controller网络控制模块、Controller输入控制模块、Model用户数据加载模块、View界面图像加载模块等组成,如图51所示。图51典型案例三维交互类系统组成“Model模型加载模块”实现加载将模型实例化到场景。用于控制飞机引擎各个零件类的Shader,也可以控制鼠标进入场景后的零件Shader和声音的变化。这里不包括MeshRender简模控制器的加载。“Controller网络控制模块”实现与终端软件通信的相关功能。网络模块接收来自终端软件的控制指挥,实现暂停、继续、退出等相关功能。Controller在飞机引擎三维自动交互类场景系统中使用几种OnMouse输入控制的方法实现响应用户单击发动机零件检测其状态,实现拆卸。“View界面图像加载模块”实现图像显示的功能。包含场景的显示、用户分数数据显示、系统提示显示、用户登录模块显示等。当图像显示模块接收到其他模块输入的数据时,实例化显示相应图像模块。该模块是终呈现给用户的UI界面。“Model用户数据加载模块”包括MySQL用户表中的数据库。只有包含在此数据库中的学生才能登录加载主场景(此处数据库已经剔除,使用一个字典保存用户数据)就是各个发动机零件的个数与拆卸顺序和规范命名。“Model声音加载模块”实现播放音频的功能。在拆卸界面下,可以拆卸3种不同零件类型时。声音的变化,种是可以现在拆卸的零件声,第二种是现在不能拆卸的零件声,第三种是无法拆卸的零件声音。还有就是背景音和按钮的声音。2. 网络组成飞机引擎三维拆装虚拟交互系统运行于PC或Android Pad上,其与外部组成网络,如图52所示。图52系统网络图5.2.2系统功能[*2]1. 飞机引擎三维拆装虚拟交互系统1) 鼠标操作后拆装功能主要是指实现用户操作能够体现并得到拆卸的功能。当用户进入飞机引擎三维自动交互类场景系统时,使用鼠标进入发动机零件检测。分为3种不同的状态: 可以拆卸、现在无法拆卸和无法拆卸。当零件可以拆卸时,单击并拖动鼠标实现拆卸,并自动将下一个可以拆卸的零件显示为可拆卸状态。无法拆卸的零件不能使用鼠标拖动。在项目中,设计了3种零件不同状态的材质显示和鼠标指针的变化。2) 通信控制功能在飞机引擎三维交互系统中,当用户单击终端软件上的“暂停”按钮时,终端软件通过内部通信接口将暂停指令发送给场景中。在软件接收到指令时,执行暂停,禁止用户操作并通过内部通信接口指令,禁止所有零件上的Mesh Controller,后检测是否禁用并反馈一个执行结果的。在用户单击“退出”指令后,使用软件内部通信接口判断,执行“Application.Quit();”语句退出软件。终端软件的继续控制指令与退出相反。2. 飞机引擎三维拆装虚拟交互系统操作1) 鼠标操作播放拆装动画在这个场景中使用单击按钮控制视频的播放和暂停,用户通过学习视频,了解发动机的功能构造和原理,或者观看发动机自动拆卸和组装过程动画了解,进一步学习。2) 通信控制功能在飞机引擎三维交互系统中,当用户单击终端软件的暂停命令时禁用脚本中的控制播放视频的函数。继续命令功能相反,执行“Application.Quit();”语句退出软件。3. 三维自动交互类VR场景系统1) 键盘操作后的拆装功能在这个场景中键盘控制的对象有两个: 发动机零件的拆卸状态和发动机的材质是否透明化显示。使用鼠标可以无限制地对发动机进行全方位、多视角的观察。 2) 通信控制功能在飞机引擎三维拆装虚拟交互系统中,当用户单击终端软件的暂停命令时禁用脚本中的控制自动播放的函数和改变材质函数,以及禁用挂在摄像机上的CameraMove脚本。使鼠标无法再改变场景的观察视角。执行“Application.Quit();”语句退出软件。5.2.3系统接口[*2]1. 系统设计网络通信采用TCP/IP,在通信协议基础上判断是否是输入输出指令,是否有返回值,其属性如表51所示。表51飞机引擎拆装模拟系统开发设计系统接口类型名称参数返回值/类型输入暂停暂停指令字符串无输出暂停回复暂停回复指令字符串无输入继续继续指令字符串无输出继续回复继续回复指令字符串无输入退出退出指令字符串无输出退出回复退出回复指令字符串无2. 交互信息网络通信采用TCP/IP,在通信协议基础上网络协议分为控制协议与路径协议两类。控制协议规范暂停、继续等控制指令,路径协议规范输出数据文件路径。网络协议符合XML规范,其格式参考如下: <Command Type="Control" Confirm="false">Launch</Command>网络协议参数说明如下。(1) Type属性。Type属性参数名表示当前网络协议的类型,其取值如表52所示。表52网络协议Type属性参数列表参数名参数值说明Type属性Control控制协议Type属性Path路径协议(2) Confirm属性。Confirm属性参数名表示当前网络协议是否需要回复确认收到指令,其取值如表53所示。表53网络协议Confirm属性参数列表参数名参数值说明Confirm属性true表示需要回复确认收到指令Confirm属性false表示不需要回复确认收到指令(3) Command值。Command值参数名表示当前网络协议的内容,其参数值受Type类型限制,仅Type属性参数值为“Type限制”列里的值时才可使用,其取值如表54所示。表54网络协议Command值参数列表参数名参数值Type限制说明Command值LaunchControl表示启动系统软件,根据系统性质决定是否响应Command值QuitControl表示退出系统软件Command值PauseControl表示暂停系统软件,此时软件禁止用户输入Command值ContinueControl表示继续系统软件,此时软件恢复用户输入Command值ReplayControl表示重播系统软件,相当于重新启动软件Command值数据文件XML文件路径Path表示数据文件XML文件路径,如mnt/sdcard/Data/Name(学员名) SaveDate.xml通过以上表格分析,3种命令的控制指令的xml规范化的字符串为以下3种。<Command Type="Control" Confirm=" false">Launch</Pause><Command Type="Control" Confirm=" false">Launch</Continue><Command Type="Control" Confirm=" false">Launch</Replay>5.3飞机引擎三维拆装虚拟交互系统设计飞机引擎拆装模拟系统项目采用Unity3D引擎制作,该引擎制作效果精良,同时跨平台,能够支持部署Android平板电脑与PC。典型案例三维交互类系统展示飞机发动机拆卸和组装时,运用Unity3D引擎的场景功能,将系统的设计模块化,并为设计内容丰富,效果逼真的三维环境提供支持。5.3.1用户登录场景设计[*2]1. 界面需求开始界面使用的是Unity3D的NGUI插件,制作场景的UI界面,使用它的几个功能比如Sprite、Button、UIInput,结合它自身的Itween动画制作startpannel、loginPannenl、loginErrorPannel。标题要求如下。当标题只有一行时,“位置”栏只需使用“行”的坐标与宽高数据,而当标题有两行时,则需要使用“第二行”的坐标与宽高数据。根据实际设计选择相应的数据,同时应控制标题不超过两行。当系统为教学与自学类别时,标题需在后分别加入“教学”与“自学”文字;当系统为练习类别时,需加入“练习”文字;当系统为考试类别时,加入“考试”文字。标题规格如表55所示。表55标题规格表字体字体宋体字号100颜色#FFFFFF对齐居中加粗是位置行X**宽**Y210.7高104第二行X**宽**Y314.6高104上表中各级带部分表示未做具体限定,但需要满足如下规则。行与第二行均需在X轴上居中于场景画布宽度。宽度视标题内容多少设置,不大于或等于场景画布宽度,背景如图53所示。图53开始场景背景示意图控件: “进入”按钮控件控制进入中间场景,如表56所示。表56开始关键帧控件规格表控件名类别位置大小图标进入按钮X0宽225Y-100高482. 制作步骤与效果(1) 使用NGUI的Sprite命令新建背景后,在新建图集将背景图片新加到图集ARPG图集中,再新建一个Title并写入文字“角色登录界面”,如图54所示。图54开始场景与文字背景及NGUI元素搭建在其下面新建两个Button为btn_user、btn_enter,每个button下再新建一个Lable,分别加入文字“用户名”和“进入系统选择”,如图55所示。图55开始场景Pannel与界面及NGUI元素搭建(2) 开始场景设计——loginPannel。在bg这个物体下新建Sprite的物体命名login,在下面新建Label,文字为“登录”。在同级中新建两个button,在两个Label和UIInput改变它们的名字,再加入文字,分别为“账号”和“密码”,如图56所示。(3) 开始场景设计——loginErrorPannel。在bg这个物体下新建Sprite的物体并命名为LoginError,在下面新建Label,文字为“登录名有误请重试”。在同级中新建一个button,如图57所示。(4) 开始场景设计——过渡动画的添加。在startPannel上添加Tween Scale和Tween Position,如图58所示。图56开始登录Pannel与NGUI元素搭建图57报错Pannel与NGUI元素搭建图58startPannel添加动画在loginPannel上添加Tween Scale,如图59所示。图59loginPannel添加使用动画在loginPannel上添加Tween Alpha,如图510所示。图510loginPannel与使用动画(5) 开始场景设计——脚本逻辑的制作。在UIRoot新建一个C#脚本,命名为StratmenuController.cs,添加字段,并在Inspector面板赋值。public staticStratmenuController _instance;//单例模式public TweenScale startpannelTween;public TweenScale loginpannelTween;public TweenAlpha loginErrorTween;public TweenPosition startpannelPositionTween;public UILabel usernameLabelStart;public UIInput usernameInputLogin;public static string username;public static string password;public UIButton startpannelnameButton;public UIButton startpannelEnterGameButton;public UIButton loginpannelCancelButton;public UIButton loginpannelLoginButton;public UIButton LoginPannelErrorBackButton;如图511和图512所示。图511所有的Pannel显示与隐藏图512脚本字段的赋值


各个按钮定义成事件委托,例如:EventDelegate ed1=new EventDelegate(OnUsernameButtonClick);startpannelnameButton.onClick.Add(ed1);再写出它的方法:///<summary>///进入姓名修改界面///</summary>public void OnUsernameButtonClick(){//输入账号startpannelTween.PlayForward();StartCoroutine (HidePannel (startpannelTween.gameObject));loginpannelTween.gameObject.SetActive (true);loginpannelTween.PlayForward();}其他的功能按钮同上所述。但其中的“登录”按钮需要在数据库的学员表中,在本系统删除了这个数据库,使用了一个有6个学员数据的字典。再提供一个方法为外部调用这个字典。当在loginPannel中输入学员名和密码,再单击“登录”按钮后,会检查这个输入是否合法。再进行Pannel切换。当用户输入的用户名合法后,单击“进入系统选择”按钮后加载第二个场景,也就是选