APP下载

基于Unity3D的小学科学教育游戏的设计与开发

2021-01-28周雪薇

微型电脑应用 2021年1期
关键词:血量背包物体

周雪薇

(东北石油大学 计算机与信息技术学院, 黑龙江 大庆 163318)

0 引言

目前国内外对于教育游戏的探索达到了一个蓬勃发展阶段,国外对于教育游戏的研究可以说是捷足先登,起步早,自然也相对成熟,比如加拿大的Inlight Entertainment公司以其成熟的设计技术和游戏内容,以及多样性的游戏类型深受学校、教育机构等的欢迎,目前可以用于数学、英语等多门学科[1]。近年来,国内的教育游戏研究也取得了一定的成效,在市场上陆续出现一些优秀的教育游戏作品。2004年,珠海奥卓尔软件公司、华南师大未来教育研究中心等机构合作组建了国内第一个以搭建游戏化教学平台为己任的研究团队,并在桑新民教授的指导下开发了一款名叫“奥卓尔游戏化学习世界”的教育游戏[2],该游戏能够将知识与游戏进行完美的融合中,让学生在玩中学,学中玩,充分吸引学生的兴趣,提高学习效果等。虽然在国内外目前有不少公司和研究机构开发了应用在中小学课程的教育游戏,但是基本上都是针对语文、数学、英语、物理、化学等传统学科,在小学科学学科方面的教育游戏,是少之又少。

本文基于Unity3D与3DS Max,设计开发出一款小学科学教育游戏《科学探险》,通过创建虚拟情景,加入游戏化互动元素,将小学科学与教育游戏紧密结合,旨在借助教育游戏的特点,帮助学生在游戏中学习科学知识,同时提升学生的科学素养和解决实际问题的能力,更好地促进学生的学习与发展。

1 总体设计

1.1 系统设计思路

教育游戏的设计是教育游戏开发的前提,良好的教育游戏设计对于整个开发过程是至关重要的[3]。本游戏所开发的基于Unity3D的教育游戏——科学探险是一款小学科学游戏,也是一款角色扮演类探险游戏。通过查阅资料和素材,对小学科学六年级课本知识进行深入了解,结合教育游戏设计的一般模式。首先进行开发前的教学分析,分别是学习者分析、需求分析、教学内容和目标分析,然后进行游戏的设计,分别是游戏故事设计、人物角色设计、游戏任务设计、游戏脚本设计、游戏界面设计和游戏交互设计,然后进行具体功能设计,接下来就可以进行游戏的开发,分别是开发工具的选择、游戏场景开发和游戏模型开发,最后是测试与发布,开发模式,如图1所示。

图1 教育游戏开发模式

结合教育游戏的特点和小学科学课的教学目标与内容对游戏的总体设计进行分析,本文鉴于教育游戏的可实现性,选择3个知识点内容进行设计开发,分别是动植物分类、工具与机械和垃圾分类。

1.2 系统开发框架

(1) 框架搭建

本教育游戏系统支持PC端,手机与平板电脑等多种终端使用。具体框架图,如图2所示。

图2 系统架构图

该框架最下层的是文档、视频等作为数据层。在逻辑层,通过Unity3D引擎编写逻辑控制,集成为数据管理系统、物理模拟系统、音效系统、背包系统和测试系统。管理系统之上的是游戏的任务模块:工具与机械模块、动植物分类模块和垃圾分类模块作为显示层。

本教育游戏的关卡流程,如图3所示。

图3 关卡流程图

玩家进入游戏后,阅读操作说明后,可以任选“开心农场”、“机械谜题”、“绿色守护者”3个关卡其中一个场景作为游戏的开始,进入到相应的场景,并最终会经历所有环节,完成3个关卡中所有任务后,进入“最后的试炼”关卡,通过选择题的形式,测试玩家对于前3个关卡相应知识点的掌握情况,最后闯关成功。

(2) 场景模型建模

按照编写的游戏脚本,将场景中所需要的模型,如关卡中所需要的房间、管钳、羊角锤、螺丝刀和箱子等相关模型进行建模。建模工具所用软件为3DS Max。游戏中所需要的模型的制作主要分为3个方面。

① 利用标准的基本几何体组合制作简单的模型,如木板、房间等;

② 需要几何体组合和变形,改变几何体相应的结合点进行基础建模,像是羊角锤、螺丝刀等;

③ 模型进行贴图建模,物体的模型不要求特别逼真,像是电视机,木箱子。模型材质的处理主要有直接对模型添加相应的颜色和采用PS处理相应的图片进行贴图。

在建模过程中,模型优化将直接影响游戏的运行效率与渲染负担。常用的优化方法减少布尔操作、避免三角面建模与四边面建模混用、删除多余面片、修正布线以及模型附加等。通过优化,将明显提高模型的渲染速度[4]。具体建模流程,如图4所示。

图4 建模流程图

(3) 模型导入与场景搭建

将3DS Max软件中导出的FBX格式模型导入Unity3D的Asset文件夹下,Unity3D会自动识别模型、材质等[5],在Unity3D中添加地面以及天空盒子,在地面添加数木、草地等物体,从而营造出较为真实的虚拟环境,增强学习者的投入度,利于知识和技能迁移。

2 关键技术

2.1 角色控制实现

游戏设计并实现两种性别的虚拟角色,可供玩家选择,角色选择通过预先设计好男女角色的预设体,两个角色放在同一个场景的相同位置上,当游戏开始时,鼠标点击选择角色按钮后,通过“bprefab.SetActive(false)和gprefab.SetActive(true)”方法显示选定角色,未选用角色执行 destroy 方法进行销毁。整个游戏采用第三人称视角运行按键WSAD控制主角的移动,按住鼠标右键进行视角转换。

(1) 主角移动

在第一人称虚拟角色上新建脚本role作为控制人物移动脚本,在inspector界面设置一个移动速度speed,作为人物的移动速度。利用函数GetKey()监听键盘输入,若键盘按下WASD四个按键时,则触发语句,利用transform.Transform方法(三维方向向量*系统增量时间*移动速度),就能使得第一人称人物按规定方向进行移动,从而完成第一人称人物的移动控制[6]。

(2) 视角转换

在每个场景中都能通过鼠标和键盘对视角范围及远近进行缩放控制,与角色移动同理,要实现旋转视角的效果,就要通过脚本代码来实现,编写好脚本后将其赋予相机。其中通过鼠标右键控制视角方向,鼠标滚轮控制镜头的远近,对视角角色与调节速度进行设置,调节合适的大小。控制相机速度和视角的实现方法如下。

xRotation+=Input.GetAxis(“Mouse X”)*rotSpeed*Time.deltaTime;

yRotation-=Input.GetAxis(“Mouse Y”)*rotSpeed*Time.deltaTime;

xRotation=ClampAngle(xRotation,xMinLimit,xMaxLimit);

yRotation=ClampAngle(yRotation,yMinLimit,yMaxLimit);

2.2 背包系统功能

背包系统是GUI的重要组成部分,游戏界面设计利用UGUI设计实现[7]。背包系统会根据预先设计中需要拾取的物体在背包系统中的窗体方格中添加金币、羊角锤、螺丝刀、钥匙等相关工具。当物品道具出现时,通过物体的tag标签对背包内物品进行检测。若背包中存在相同道具时,则将物品数量的下标加1;若不存在,则按窗格顺序自动放置物品,如图5所示。

图5 “背包系统”功能展示

背包系统中主要实现的是3个效果,分别是背包的显示与隐藏功能、物品的拾取与存储功能和鼠标绘制物品功能。

(1) 背包设计

首先针对背包内的道具物品声明一个工具类,包括工具ID,工具名称,工具个数等。通过UGUI在Canvas下,添加按钮完成背包界面的搭建,每个按钮的名称与物体相对应。

public class ItemEntity {

private string objId;//工具ID

private string objName;//工具名称

private int count;//工具数量

private int level;//工具层级

private bool isCanAdd;//工具是否可添加

private int maxAdd;//工具最多可添加数

}

(2) 拾取与显示功能

拾取功能设计为当游戏人物触碰物体,点击物体,物体消失,同时物体对应的图片显示在背包的按钮上。首先,先声明一个数组List,对物体进行存储,在点击场景中物体时,摄像机发出射线,若射线与道具物体进行碰撞,则销毁该物体,并将该物体加入泛型List中。之后调用Show()方法,遍历List中的所有物体,通过List中物体的名称作为查询条件,利用Resource.Load()进行动态加载,显示在上述的按钮的Source Image上。

(3) 背包中道具的使用

对每一个按钮绑定监听,若点击按钮,则会根据按钮的名称找到对应的道具图片,将该图片绘制在鼠标位置上。首先每帧获取鼠标位置,然后通过GUI.DrawTexture完成绘制。

Rect rect = new Rect(mousePos.x, Screen.height - mousePos.y, 200, 200);

GUI.DrawTexture(rect, sp);

点击之后的效果,如图6所示。

图6 使用工具效果图

2.3 答题功能

本功能作为游戏的最后一关,测试玩家通过游戏之后对于知识的掌握情况。设计为主角与怪兽进行知识比赛,由玩家方进行答题。双方设有血条,如图7所示。

图7 答题界面

上面是双方血条,代表当前的血量状况,题目内容根据前几关的学习的知识进行提问。如果玩家方答对,则怪物掉血,相反,若玩家方答错,则主角掉血,若怪物当前血量为0,那么主角通过最后一关,也证明通过考试,掌握了相关技能与知识;若主角的当前血量为0,那么通关失败,则进行重新答题或重新学习。

(1) 试题的存储与读取

游戏中设计的题型是选择题,试题信息存储在XML文件根节点list下的子节点item中,每个item结构包括:tmxh(题目序号)、xa(选项A内容)、xb(选项B内容)、xc(选项C内容)、zqda(正确答案)和stnum(试题数目)。首先对XML试题文件进行解析,操作步骤如下。

a.利用XmlDocument解析并且加载XML试题文件的内容;

b.获取list节点下的所有item中的试题信息;

c.构造结构体并声明结构体数组存放试题信息;

d.将获取的试题信息加载到试题的结构体数组,实现对试题的解析。

此外,从XML中解析出的试题会打乱顺序,使用随机函数r=Random.Range(i,num.Length),可实现每次出现的题目顺序不同。

(2) 题目显示与点击选项实现

在解析xml文件之后,获得对应的试题内容、试题选项和正确答案。在OnGUI函数中,通过GUI.Label()函数实现在特定位置显示试题内容,通过 if (GUI .Button ()) 判定选择的选项,并与正确答案进行比对,正确则获得相应分数,错误则不得分。

(3) 血量的显示与计算

通过UI的slider实现血条,设计变量human_currHP表示当前血量,human_MaxHP表示最大血量,二者相除所得的值为slider的值。

slicder_human.value = human_currHP / (float)human_MaxHP;

设置主角 human_currHP和怪兽的最大血量mon_currHP为50以及每道题的伤害值为10,如果答错问题,当前生命值-10,若在update()函数检测到人物的当前血量为0,则闯关失败;若怪兽的血量为0,那么闯关成功。

3 总结

本文借助Unity3D引擎,以小学科学课内容为背景设计一款教育游戏。首先介绍国内外教育游戏的研究现状。其次是对游戏进行总体设计包括确定教育游戏的开发模式,系统开发框架以及关卡流程图。最后是对系统的功能进行开发。将小学科学与教育游戏的灵活性与趣味性进行了很好的融合,为游戏化学习和教育游戏的开发和设计提供一种思路。本系统能够使学习者在虚拟化的环境中发挥学习主体作用、充满体验的乐趣和探索精神[8],并弥补了实验器材不足所带来的缺陷等问题。但本系统仍然存在一些不足之处,如交互功能的设计上以及游戏界面的美观上还需要进一步改进,这就需要后续完善。

猜你喜欢

血量背包物体
科学神兽之战
红细胞的奇妙旅行
深刻理解物体的平衡
大山里的“背包书记”
我们是怎样看到物体的
一包装天下 精嘉Alta锐达Sky51D背包体验
鼓鼓的背包
创意西瓜背包
膀胱冲洗液中加入去氧肾上腺素在老年患者经尿道前列腺电切术中的应用
为什么同一物体在世界各地重量不一样?