基于Unity3D的中学数学概率学习游戏设计与实现
2016-05-30王丽
王丽
摘 要:教育游戏的出现,极大的改变了学生的学习方式,学生可以通过教育游戏将娱乐与学习结合起来,提高学习兴趣和效率。文章利用3ds Max建立三维游戏场景和道具,使用Unity3D作为开发平台,以JavaScript作为开发语言,设计并实现了一个中学数学概率学习的三维游戏。
关键词:游戏;建模;Unity3D
中图分类号:G434 文献标志码:A 文章编号:1673-8454(2016)08-0068-04
一、引言
学生是有个性差异的,课堂教学无法满足每个学生的学习需求,但通过教育游戏却可以实现因材施教。教育游戏可将游戏任务按照难易程度划分等级,使每个学生可以根据自己的学习情况选择适合的等级,制定自己的学习进度,自主学习能力也得到了提升[1]。此外,教育游戏还具有很强的挑战性、互动性和趣味性,可以激发学生强烈的求知欲和学习动机[2]。学生利用教育游戏进行学习,不仅可以巩固已学的知识,拓展知识面,还能提高想象力。教育游戏还有助于培养学生正确的人生观和价值观。
文章利用3ds Max建立三维游戏场景和道具,以Unity3D为开发环境,JavaScript为开发语言设计并实现了一个中学概率学习游戏。让学生体验游戏刺激的同时,可以通过回答问题来学习、巩固概率知识,使学习不再枯燥,让学生快乐学习,爱上学习,提高学习效率。
二、游戏开发流程
首先,根据学习目标设计学习内容和游戏流程,接着利用3ds Max建立模型、为模型赋予材质;然后将文件导入Unity3D中进行游戏的开发,内容包括碰撞检测、动画设置、添加特效、布置灯光、添加音乐、人机交互设置六大部分;最后进行优化系统,导出为可执行文件。游戏的开发流程如图1所示。
三、游戏设计与实现
1.设计思想
此游戏属于密室解谜类游戏,游戏场景的部分结构图如图2所示。整个密室由一个个小密室组合而成。当玩家进入游戏后,玩家就会位于如图2所示的位置,玩家想要离开密室,必须打开门。当玩家向门走去的时候,就会触发一个触发器,弹出一道数学概率问题。第一个问题是相当简单的,凡是学过中学概率的都可以解决,所以当第一个问题回答错误时,会弹出失败场景,并提示玩家要先去学习中学数学概率的内容,再来玩这个游戏。当第一个问题回答正确,密室的门会自动打开,玩家可以经过走廊进入第二个密室。从第二个密室开始,每道关口除了有一个正门外还有一个侧门。当玩家走向第二个密室主门时,会弹出第二个问题,这个问题比第一个问题略难。当这个问题回答正确,主门会自动打开;如果回答错误,侧道的门会打开,侧道也会有一些关于概率的问题,这些问题是主门问题的分解问题,帮助玩家理解主门的问题。游戏的时间限制为25分钟,单个问题没有时间限制,这种设置给了玩家相对自由的空间。整个游戏场景共有6个主道以及6个侧道,直到玩家开启最后一个密室的门,游戏会结束,并弹出胜利的场景。
2.建模
(1)建模前的相关设置
为了使3ds Max制作的模型与现实世界相符合,需要对3ds Max进行必要的单位设置。将“系统单位”和“显示单位”都设置为厘米。通过这样的设置,也可以将模型导入Unity3D中,这样进行后期游戏开发时更容易操作[3]。
(2)密室场景建模
密室建模采用“多边形建模”的方法。密室分大厅和走廊两个部分。整个密室由若干个大厅和走廊组成,密室大厅的统一规格是:高600cm,长1200cm,宽800cm,密室走廊的统一规格为长400cm,宽1000cm,高400cm。
①密室墙体建模
密室大厅的原型是一个高600cm、长1200cm、宽800cm的长方体,点击工具栏的“创建”面板,选择“标准基本体”中的“长方体”并将其命名为“box1”,设置其长、宽、高分别为1200cm、800cm、600cm。然后将box1转换成“可编辑多边形”,选择“多边形”子集中的“翻转”选项,将box1的法线方向进行反转,使大厅的内墙可见。
密室走廊的原型是一个长400cm、宽1000cm、高400cm的长方体,建立的步骤与密室大厅完全相同。建立后将其命名为“box2”。
②门的建模
要用门将大厅和走廊隔离开来。很多做法可以实现这个目的,笔者用的是“超级布尔”。将box1和box2按如图3的方式进行摆放。选择box1,在3ds Max的“复合对象”面板下选择“超级布尔”。选择“参数”中的“差集”和“盖印”,选择“拾取布尔对象”中的“开始拾取”,点击box2,就会得到一个门的轮廓,效果如图4所示。门的轮廓已经完成,接下来就需要制作门了。门的原型是一个长400cm、高400cm、宽20cm的长方体,按照box1的建立步骤创建一个长400cm、高400cm、宽20cm的长方体,将其命名为“door”。将“door”摆放到box1和box2的交界处。
接着通过上述方法完成其他大厅及走廊的创建,并将大厅和走廊用门隔绝开来,然后选择box1,选择“修改”面板下的“附加”命令,将其他大厅和走廊与box1组合在一起,就完成了整个密室的建模。最终效果如图5所示。
(3)道具建模
虽然游戏场景建立好了,但当玩家位于游戏场景中时会感觉略显空旷,而且为了给密室营造一种诡异、紧张的氛围,需要建立一些火盆摆放在主门的两边。火盆的制作主要分为火盆和支架两个部分。
①火盆的制作
点击工具栏的“创建”选项,选择“标准基本体”中的“圆柱体”,并将其命名为“fire”。将fire的半径设为40cm,高度设为20cm,边数设为8并转化成可编辑多边形。选择fire上边的面,将其放大并选择“插入”选项,给上边的面插入一个新的面。选择新面,选择使用“挤出”,将新面向下拉,然后选择“切割”命令,对新面的对顶点进行切割,共需要切割四次,中间会形成一个新的点。进入“点”子集,使用“选择并移动”命令,将该点微微拉起。这样就完成了火盆的制作。
②支架的制作
支架的做法相对简单,同box1的建立方法一样,建立一个长20cm、宽20cm、高180cm的长方体,并将“高度分段”设为2,将其命名为“support”。将新建的长方体转换为可编辑多边形,进入“点”子集,选择“选择并移动”命令,将support的中间四个点向下拉,将底面的四个点向外拉,支架的模型就建立完成了。为了节约电脑资源,可以将看不见的底面删除。按照这种方法,再建立3个support,并按照图6所示将四个支架与火盆组合在一起。至此,火盆的模型就完成了。
3.贴图的制作
搜集贴图,通过PS加以修改。将修改好的贴图导入3ds Max赋给游戏场景中的内墙和游戏道具。打开3ds Max工具栏的“材质编辑器”,将贴图赋予空白的材质球,选择“将材质指定给选定对象”选项,即可进行模型的贴图。
4.模型的导入
将建立好的游戏场景及其贴图放在Unity3D游戏的资源文件夹下。当把游戏场景拉入Unity3D的开发界面中时,会发现游戏场景上的贴图不见了。这时,只需要在游戏场景的文件里找到那几个材质球,将其重新赋予场景中的对象,就完成了游戏场景和道具的导入。
5.游戏各模块的实现
(1)灯光系统
由于Unity3D无法识别3ds Max的灯光,所以需要在Unity3D建立灯光系统。本设计的灯光只用到“点光源”,使用这种光源,是为了模仿火光。
在网格层次面板选择“创建”按钮,创建一个点光源,将其重命名为“firelight”,在firelight的检视面板里修改相关属性。将firelight的“范围”属性设为15,“强度”属性设为6,颜色调整为与火光相同的颜色。
(2)动画
游戏中有门自动打开的动画。选择工具栏的“窗口”选项中的“动画”,在弹出的对话框中,点击红色按钮开始创建动画,并先将要创建的动画进行保存。在0:00的位置添加关键帧,将时间轴移动到2:00的位置,将游戏场景中的门向下拉,并添加关键帧。这样一个门的开门动画就做好了。按照以上做法,给每个门创建开门动画。
(3)特效
本设计的特效是“火”,该特效是用粒子系统制作而成的。在网格层次面板选择“创建”按钮,创建一个粒子系统,将其重命名为“fire”。在fire的检视面板里修改相关属性。粒子系统相关属性修改完后,就要为火焰贴上材质,使其更加真实。在工程面板里创建一个材质,将其命名为“firepicture”。在其检视面板里将“渲染”设置为“FX”,这样当把火焰的贴图赋给“fire”时,可以去掉贴图黑色的部分。然后把“firepicture”赋给粒子动画,这样本设计的特效就制作完成了。
(4)人机交互
本设计使用的是Unity3D自带的人物,点击工具栏的“资源”选项,选择导入“Character Controller”,就完成了游戏人物的导入。将导入的人物拖入到游戏场景里,就可以用W、S、A、D控制人物上下左右移动。
(5)音乐
系统需添加三种声效。 首先需要为整个游戏添加背景音乐,选择主相机,在工具栏上点击“组件”选项,在“Audio”选项下面选择“Audio Source”选项,将导入的背景音乐拖给主相机,在检视面板里点击“循环”选项,这样背景音乐就会循环播放,第一种声效添加完毕。其次,为了营造紧张的氛围,需要给游戏人物添加心跳声,与添加背景音乐的方法一样,操作完毕之后,在游戏里就可以听到人物的心跳声。最后,需要为门添加开门声,但这个需要用代码实现。按照前面的方法添加完音效后,需要给门添加如下代码:
If(doorIsOpen==true)
{Door.audio.PlayOneShot(doorOpenSound);}
这样,所有的音效就全部添加完成了。
(6)碰撞与触发
为了避免人物穿墙而过等非自然现象的出现,需要给游戏添加碰撞。为了让人接近门的时候可以自动弹出概率题目,需要添加触发器。
①人与建筑物的碰撞
点击游戏场景的墙体,点击工具栏的“组件”按钮,选择“物理”面板下的Mesh碰撞器。这样游戏人物就可以站在游戏场景里,而不会掉下去。
②人与门的碰撞
同给墙体添加碰撞体的步骤一样,给门添加一Box碰撞器,使人物避免穿过门到达另一个密室。
③人与火盆的碰撞
给火盆添加Box碰撞器,步骤同上,使人物避免穿过火盆架。
④触发器
为了实现人走近门时自动弹出题目,需要在门的前面放一个空物体,给空物体添加Box碰撞,在空物体的检视面板里将“IS Trigger”打上对勾。弹出题目的相关代码如下:
function OnGUI()
{if(WindowSwitch==true)
{GUI.skin=im;
GUI.BeginGroup(menuAreaNormalized);
windowRect=GUI.Window(0, windowRect,WindowContain,“题目”);
GUI.EndGroup();}}
function WindowContain(windowID:int)
{ GUI.Label(Rect(0,30,300,300),“5本书分给甲乙丙三个人,按一个人一本,另两个人各两本,有多少种不同的分法。”);
If(GUI.Button(Rect(0,180,80,60),“120”))
{WindowSwitch=false;Destroy(this.gameObject);}
If(GUI.Button(Rect(220,180,80,60),“30”))
{WindowSwitch=false;Destroy(this.gameObject);}
If(GUI.Button(Rect(0,240,80,60),“90”))
{box3.flag2=1;Destroy(this.gameObject);}
If(GUI.Button(Rect(220,240,80,60),“60”))
{WindowSwitch=false;Destroy(this.gameObject);}
GUI.DragWindow();
}
四、游戏的优化与发布
1.游戏优化
游戏场景中含有大量的点灯光,会对游戏的性能产生较大的影响。使用光照贴图技术,将光线效果渲染成贴图可以节约大量的电脑资源[4]。方法为:点击工具栏的“窗体”按钮,选择“光照贴图”选项,点击“烘焙”对当前游戏场景进行烘焙。
2.发布
在工具栏的“编辑”面板下,选择“工程设置”面板下的“玩家”选项,对游戏的图标和名称进行设置。点击“文件”面板下的“工程设置”选项,从工程面板里将游戏的几个场景文件拖入到“工程设置”的窗口里。点击“建立”按钮,就会生成一个可执行文件,这样就完成了游戏的发布。游戏胜利时的场景如图7所示,答题时的场景如图8所示。
五、结束语
文章设计并实现了一个中学数学概率的教育游戏,帮助学生在娱乐中进行学习,让学生轻松学习、爱上学习、快乐学习。系统基本实现了需求分析中的要求,但由于时间仓促,系统的功能还可以在后续研究中进一步完善,如:可以在游戏中添加一些障碍物或机关,以增加游戏的趣味性;可以在游戏场景进行切换时添加一些过度动画,使游戏更加美观。
参考文献:
[1]冯威.数学游戏与高中数学教育研究[D].大连:辽宁师范大学,2012.
[2]王倩,赵玉清.教育游戏在小学数学教学中的应用探析[J].软件导刊,2013,12(3):3-8.
[3]Li Wang. Researching of the three-dimensional virtual simulation campus scenes construction technology[J].The Open Cybernetics & Systemic Journal,2015(Volume9):1056-1057.
[4]Li Wang.Construction of the three-dimensional virtual campus scenes Problems and Solutions[J].The Open Cybernetics & Systemic Journal,2015(Volume9):1132-1133.
[5]宣雨松.Unity3D游戏开发[M].北京:人民邮电出版社,2012:91-13.
[6]谢亮.数学教育游戏与数学教学[D].广州:广州大学,2008.
(编辑:鲁利瑞)