郑清生 代君
10.3969/j.issn.1671-489X.2022.03.036
摘 要 教育游戏可有效提高学生学习兴趣和学习效率。基于七年级学生对游戏的偏好及对新鲜技术学习的强烈好奇心,以沪科版七年级数学上册“相反数”为例,利用Unity 3D设计与开发一款教育游戏,着重阐述游戏的设计与开发过程,以期帮助学生更好地理解相反数概念,掌握相反数在数轴上的位置关系。
关键词 初中数学;相反数;教育游戏;Unity 3D
中图分类号:G633.62 文献标识码:B
文章编号:1671-489X(2022)03-0036-06
0 引言
中国互联网络信息中心(CNNIC)发布的《2019年全国未成年人互联网使用情况研究报告》显示,未成年网民上网玩游戏占未成年网民上网从事活动的比例达61%,初中生网民上网玩游戏占初中生网民上网从事活动的比例达64.7%[1]。2021年,中国互联网络信息中心(CNNIC)第47次《中国互联网络发展状况统计报告》显示,截至2020年12月,10~19岁的网民占比为13.5%,初中学历网民群体占比为40.3%[2]。报告表明未成年人对游戏有着特别的偏好。
教育游戏是以游戏的形式和过程呈现教育内容,以帮助学习者获得概念、知识、技能以及策略等为目的,集知识性、趣味性、竞争性、虚拟现实性等于一体的计算机游戏软件[3]。教育游戏作为游戏的一个子集,不再只具有娱乐的功能,更具有教育功能属性。《义务教育数学课程标准(2011年版)》指出,数学课程的设计与实施要合理运用现代信息技术,注意信息技术与课程内容的整合,开发并向学生提供丰富的学习资源,要把现代信息技术作为学生学习数学和解决问题的有力工具,改进教与学的方式,使学生乐意并投入探索性的教学活动中去[4]。
将数学的学习内容合理地融入游戏中,通过模拟现实情景,吸引学生眼球,激发学生学习兴趣。游戏关卡的挑战性和任务性的合理设计,有利于学生主动地进行思维、验证和探索等活动,发展学生思维的创造性。
本文根据数学新课程标准,选择沪科版七年级数学上册“相反数”进行数学教育游戏的设计与开发,为学生提供寓教于乐的游戏学习资源,以更好地促进学生对抽象数学内容的学习,激发学生学习数学的内在动力。
1 学生特征分析
对于刚从小学升入初中的七年级学生来说,正处于小学到初中的过渡阶段。此阶段的学生思维活跃,参与学习的积极性也较高,具备一定的抽象思维能力,但有时还需要借助一些具体形象事物来支持;在学习的过程中具备一定的独立分析、概括、归纳的能力;具有一定的自学与合作学习的能力,但学习自控能力还不强,需要教师在适当的时候加以引导和掌控[5]。大多数学生乐于学习数学,但数学学科内容相对抽象,如果教师不采用一些具体形象内容进行教学,很容易导致学生对枯燥的数学知识丧失学习兴趣。另外,此阶段学生对新媒体技术具有强烈的好奇心,对信息技术教学系统的学习和交流参与度高。因此,在数学学科教学中,根据学生特征,适当引入数学教育游戏,可取得事半功倍的效果。
2 学习内容分析
“相反数”是初中数学七年级上册第一章的内容,是初中数学学习的主要内容之一,是在学生学习了负数的基础上,遵循过渡时期学生的认识特点,即把小学所学的正数、零和初中的负数知识紧密结合起来,为学生以后顺利掌握绝对值的意义进行有理数运算打下基础。通过相反数的学习,可以使学生对已学过的有理数、数轴等知识加以巩固,使学生理解相反数的概念及应用,让学生体会到相反数的定义过程,理解数轴上的点与数的对应关系,从而培养学生的探究发现能力和逻辑思维能力及归纳能力。同时让学生感受事物之间对立与统一的辩证思想,体验数形结合的思想。“相反数”内容的掌握对学生日后的学习具有重要作用。
3 “相反数”游戏设计
教育游戏在中小学课程教学中的应用越来越受到关注。游戏不仅可以提高学生的学习积极性,而且可以培养学生的探究学习能力。笔者以初中数学课程“相反数”的内容为例,开发制作适用于七年级学生的教育游戏,通过Unity 3D和编程技术创建虚拟太空环境闯关游戏,让学生在体验游戏的过程中充分展现主体地位。
3.1 游戏设计思路
利用教育游戏展开学科知识的学习,在内容上要注意合理的选择,不是所有的内容都适合游戏方式,主要是针对抽象程度高的知识点;在游戏设计上需要符合学生身心发展的特点,界面不宜过于复杂,以减小认知负荷;在关卡设置上要匹配学生的认知能力,在游戏挑战难度上应符合学生现有技能水平,才有利于让学生产生心流体验。相反数是指绝对值相等,正负号相反的两个数,它们互为相反数。本案例的设计是基于相反数在数轴上的位置关系和相反数的代数及几何意义为设计依据。互为相反数的两数绝对值相等,但符号相反;互为相反数的两数到数轴原点距离相等。笔者所设计的游戏需要应用数学相反数的代数和几何意义,游戏过程中隐含有数学相反数知识,从而引导学生进行探究活动。本案例游戏的设计构思如图1所示。
3.2 游戏的模块及功能设计
本游戏是基于Unity 3D游戏引擎,围绕中学七年级数学上册“有理数”章节中有关相反数知识点开发的三维游戏。在虚拟太空中搭建玩家学习和娱乐平台,其中含游戏开始界面、操作说明界面、三个关卡场景、闯关成功或失败反馈界面、游戏积分榜等模块。通过设置与相反数知识相关的游戏障碍物,将学习内容融合到游戏闯关过程中。游戏可作为课堂内辅助教学资源,也可作为课后学习巩固资源,具有提高学生学习兴趣和学习主动性,实现寓教于乐的功能。
4 “相反数”游戏的开发
4.1 开发工具介绍
Unity 3D也称Unity,源自丹麦哥本哈根Unity
Technologies公司研发的一款可以轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台综合型游戏开发工具。Unity 3D可以运行在Windows和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、WebGL、Windows Phone 8和Android平台。利用Unity Web Player插件还可发布网页游戏,支持Mac和Windows平台的网页浏览,是一个全面整合的专业游戏引擎[6]。
到目前为止,Unity 3D已更新到Unity 2021版本,主要以C#和JavaScript为编程语言。Unity
3D具有跨平台一键发布功能,拥有可视化综合编辑系统、便捷资源导入方式、高性能着色器,内置强大的地形编辑系统和模拟现实的物理引擎及强大的光影渲染系统等。除此之外,Unity 3D还提供各种功能的引擎组件,如音效、动画、粒子系统、图形用户界面(GUI)等组件,并且具有容易实现复杂的物理碰撞等特效、开发虚拟现实环境便捷、Unity 3D(个人版)免费使用等优势。因此,笔者选择Unity 3D作为游戏开发工具。Unity 3D软件界面如图2所示。
4.2 开发过程与技术实现
4.2.1 开始界面制作 游戏运行后的开始界面主要运用UI(交互界面)对象,界面内容含背景图、标题文本框、开始游戏按钮和退出游戏按钮。笔者创建操作按钮是直接从菜单中选择UI控件的“Image”。其中点击按钮事件代码如下:
public class StartGame : MonoBehaviour{
public void start() {
SceneManager.LoadScene(“Level0”);}
public void quit(){
Application.Quit();}}
“SceneManager.LoadScene(“Level0”)”用于加载游戏操作说明场景,“Level0”为游戏操作说明场景编号;“Application.Quit()”为游戏发布后运行游戏,退出Unity 3D应用程序,并为两个操作按钮分别添加“Audio Source”音频组件,增加点击按钮音效。
4.2.2 游戏简介和游戏操作说明界面 本界面主要采用UI控件中的“Text”“Image”,学生通过此界面了解游戏的使用方法,看完游戏说明后,可以点击鼠标或按下回车键切换到下一场景,代码如下:
public void enter_1(){
if ((Input.GetMouseButtonDown(0)) || (Input.GetKeyDown(KeyCode.Return)))
{SceneManager.LoadScene(“Level1”);}
else { }
}
通过点击鼠标左键或按下键盘上的回车键,并会加载游戏场景”Level1”,即进入游戏第一关“勇攀高峰”。
4.2.3 游戏环境及游戏对象创建 Uniyt 3D游戏引擎自带地形编辑系统,可以创设所需要的逼真环境。但本游戏采用天空盒和GameObject菜单下Plane、Cube、Clyinder等对象构建简单的太空虚幻场景,并导入第三人称游戏角色Player预制体资源包、数轴图片资源、音视频及金币模型等素材,完善游戏场景,如图3、图4、图5所示。
1)游戏角色由Unity 3D官网下载资源包。资源包内自带有角色控制脚本,然后将角色资源包中的第三人称人物角色预制体拖入场景中即可,学生通过操控ASDW键或方向键实现角色移动和跳跃的控制。代码此处略。为使角色拾取金币产生碰撞检测效果,为角色Player属性添加刚体组件“Rigidbody”和碰撞组件“Capsule Clooider”,
并初始化金币数量。控制代码如下:
[RequireComponent(typeof(Rigidbody))]
public class Player : SingletonMono
public int curCoin; //当前获取的金币
Rigidbody rig;
void Start(){
curCoin = 0; //初始化玩家金币为0
rig = this.GetComponent
}}
2)为使主摄像机能够跟随角色移动而变换为角色对应的视野范围,给主摄像机挂脚本组件,代码如下:
public class CameraFollow : MonoBehaviour{
Vector3 angle;
public float speedX = 200.0f; //鼠标水平方向的移动速度
public float speedY = 100.0f; //鼠标垂直方向的移动速度
private Transform transTarget; //摄像机看向的目标
void Start (){
//获取摄像机原始的旋转角度
angle.x = transform.eulerAngles.x;
angle.y = transform.eulerAngles.y;
transTarget = GameObject.FindGame
ObjectWithTag(“Player”).transform;}
void LateUpdate (){
float xMouse = Input.GetAxis("Mouse X");
//(-1,1)之间
float yMouse = Input.GetAxis(“Mouse Y”);
angle.x -= yMouse * speedY * Time.delta
Time;
angle.y += xMouse * speedX * Time.delta
Time;
angle.x=Mathf.Clamp(angle.x, 10, 90);
//(限制某个值在最小和最大值之间)
//控制摄像机的旋转
transform.rotation = Quaternion.Euler(new Vector3(angle.x, angle.y, 0));
//控制摄像机的位置
//向量左乘四元数得到旋转之后的向量
transform.position = transTarget.position + trans
form.rotation * new Vector3(0, 0, -10);}}
3)游戏中的金币在游戏运行时具有随机旋转角度效果。当第三人称角色与场景中金币发生碰撞检测时有相应音效,且随后消失。代码如下:
public class Jinbiscript: MonoBehaviour{
public float speed;
void Start(){
speed=Random.Range(90,360); //仅第一帧运行一次
}
void Update(){
transform.Rotate(Vector3.up * speed * Time.deltaTime,Space.World);
}
void OnTriggerEnter(Collider c){
SoundManager.Instance.playEffect(Sound
Path.pickupCoin); //播放音效
Player.Instance.curCoin++; //记录分数(玩家身上的金币数量加1)
Destroy(gameObject); //销毁
}}
4)为增加游戏过程中的趣味性,为游戏场景添加背景音乐,建立空对象,命名为Music,为其添加音频组件“Audio Source”,加载背景音乐。
以上是以游戏第一关“勇攀高峰”为例的场景环境及对象的创建,第二关与第三关游戏类似于第一关的操作。为方便后续游戏关卡场景环境及对象的创建,可以将上述游戏对象制作成预制体,在后续关卡的对象创建时直接调用,稍加修改即可。同时,为丰富游戏场景的光照效果,可以为场景适当添加和调整光源“Directional Light”。
4.3 游戏规则及关卡
本案例的游戏规则是学生通过控制游戏环境中的人物角色,实现在场景中的自由移动和跳跃,当人物角色碰撞到旋转的金币时,会发出碰撞音效,并通过碰撞拾取金币,获得金币数量积累榜。在有数轴场景的环节,在相反数对称的数轴对应位置取消障碍物对象的碰撞组件,以实现隐藏的出口功能。学生在游戏过程中必须结合数学相反数知识(即一对相反数关于原点对称的性质),只有正确找到障碍物隐藏的出口,才能控制角色在游戏中继续畅游。数轴上的隐藏出口同样具有陷阱,学生一旦操作不当,在行走或跳跃的过程中跳出场景平台范围,人物角色便会掉落茫茫的太空中,游戏任务挑战失败,通过点击“Restart”按钮重新加载本关游戏。只有在拾取的金币数量达到关卡所设定的数量后,学生控制的人物角色才可以通过碰撞时空传送门进入下一关卡游戏,否则时空传送门碰撞检测传送功能无效。
1)实现重新加载本关游戏代码:
public class Restart : MonoBehaviour{
private Text restartText;
[Header("当前关卡编号")]
public int currentLevelNum=1;
void Awake(){
restartText=GetComponent
void Update(){
if (Player.Instance.transform.position.y<-1)
//如果玩家掉下去了,则显示重启按钮
{restartText.enabled=true; //显示重启按钮
}}
public void OnRestartBtnClick(){
SceneManager.LoadScene(“level”+currentLevelNum);
}}
2)实现金币积累榜功能的游戏代码:
public class CoinRecord : MonoBehaviour{
[Header("通关游戏的脚本")] //可以在属性面板提示信息作用
public Exit exitScript; //通关游戏的脚本
private Text coinRecordText;
void Start(){
//从当前游戏对象上找一个Text组件,给coinRecordText
coinRecordText=this.GetComponent
(); //this是指本当前游戏对象
}
void Update(){
//金币情况(2/3)
coinRecordText.text = "当前金币" + Player.Instance.curCoin + "枚, 通关需" + exitScript.coin
Num +"枚";
if(Player.Instance.curCoin==exitScript.coin
Num){
//将文本显示为绿色
coinRecordText.color=Color.green;}}}
3)时空传送门碰撞检测,实现游戏闯关功能代码:
public class Exit: MonoBehaviour{
public string nextLevel; //下一个场景的名字
public int coinNum; //过关需要的金币数量
//碰撞检测函数
void OnCollisionEnter(Collision c) {
if (Player.Instance.curCoin >= coinNum){
SceneManager.LoadScene(nextLevel); //加载到下一关
}
else{print("不能过关,当前币"+Player.Instance.
curCoin+"枚,过关需要金币:"+ coinNum+"枚");}}}
游戏设有三个关卡,分别是“勇攀高峰”“星际穿越”“跃跃欲跳”。任何一关游戏挑战失败,均可无限次重玩当前关卡游戏。只有连续三个关卡都挑战成功后,则表示游戏闯关成功,同时加载挑战成功反馈场景,给学生带来一定的闯关成功的成就感,并结束游戏。
4.4 游戏其他功能
4.4.1 返回游戏开始界面 为方便各关卡游戏的退出交互功能,在游戏的三个关卡场景中均设置有“Return”返回游戏开始界面的交互按钮,可以随时点击该按钮结束当前游戏并返回到游戏开始界面,加载游戏开始界面的代码如下:
public class BackToStratGame : MonoBehaviour{
public void BackToStart(){
SceneManager.LoadScene(“StartGame”);}}
其中“StartGame”为游戏开始界面的场景名称。
4.4.2 动画效果制作 为丰富第二关卡游戏“星际穿越”场景效果,给“星际穿越”场景中的各星球添加不同转速的旋转动画效果,以活跃场景气氛。方法是分别选定场景各星球对象,选择Unity
3D软件中的“windows\Animation”,进入动画编辑器界面,进行动画制作,如图6所示。
4.5 游戏的测试及发布
经过上述设计与开发之后,对游戏进行测试,发现游戏的交互功能和控制逻辑正确,因此打包生成可执行程序,发布游戏。笔者开发的游戏是应用在计算机机房的,所以在“Platform”发布平台列表中选择“PC,Mac&Linux Standalone”类型,然后选择“Player Settings...”,并填写发布者名称和作品名称,最后点击“Build”按钮,生成可执行文件,使用者只需双击打开其中的.exe文件即可运行游戏。
5 结束语
笔者按照教育游戏的一般设计与开发原则,阐述初中数学“相反数”教育游戏设计与开发过程,但游戏应用于实际教学的效果还有待于后续进一步的验证。同时,该款游戏在游戏与教育平衡性、游戏界面和场景美工、学习测试模块等方面仍存有不足,仍需后续进一步的完善。教育游戏的研究是一个长期的过程,需要广大教师不断探索和实践,创造开发出更多优质的学习资源,以弥补传统数学教学模式的不足。笔者希望通过本案例的设计与开发,能够起到抛砖引玉的效果,为教育游戏的研究提供一定的参考。
参考文献
[1] 2019年全国未成年人互联网使用情况研究报告[R/
OL].(2020-05-13)[2021-12-03].https://www.cnnic.
cn/hlwfzyj/hlwxzbg/qsnbg/202005/P020200513370
410784435.pdf.
[2] 第47次中国互联网络发展状况统计报告[R/OL].
(2021-02-03)[2021-12-01].http://www.cnnic.cn/
hlwfzyj/hlwxzbg/hlwtjbg/202102/P0202102033346
33480104.pdf.
[3] 夏云,李春晖.教育游戏融入小学英语教学的模式构
建[J].电化教育研究,2012,33(2):117-120.
[4] 教育部关于印发义务教育语文等学科课程标准(2011
年版)的通知[A/OL].(2012-01-13)[2021-12-25].
http://www.moe.gov.cn/srcsite/A26/s8001/20111
2/t20111228_167340.html.
[5] 周敦鸾,周芸夙.对“相反数”的教学感悟[J].中
学数学教学参考,2017(12):15,17.
[6] 张修磊.基于Unity3D的初中物理教育游戏设计与应
用研究:以“科学探究:牛顿第一定律”为例[D].
上海:华东师范大学,2016.
作者:郑清生,江西科技师范大学,研究方向为虚拟现实技术、教育游戏(330038);代君,九江学院,研究方向为虚拟现实技术(332005)。