游戏引擎应用开发衔接课研究与设计

2022-09-15 12:58黄章菡
大学教育 2022年7期
关键词:引擎编程语法

黄章菡

桂林航天工业学院,广西 桂林 541004

游戏引擎应用开发是数字媒体技术专业大三下学期的一门专业课程。该课程是让学生通过学习游戏引擎Unity 来掌握开发游戏的技能,对学生的编程能力要求很高,学生如果没有一定的编程能力就很难学好这门课程。然而,很多学生的编程能力有限,还达不到开发游戏的要求,导致他们在学习游戏引擎应用开发时出现困难。因此,研究游戏引擎应用开发衔接课非常重要。目前,单纯研究游戏引擎教学课程的文献有很多,面向对象编程课程的文献也很多。但是据文献调研,目前还未发现游戏引擎应用开发衔接课的相关研究。

一、衔接课的必要性

游戏引擎应用开发课程是一门对实践能力要求较高的课程,不仅要求学生掌握游戏引擎的场景编辑、动画处理、逻辑管理、视觉特效等功能,而且要求学生能利用这些功能模块结合C#编程语言编写游戏逻辑,制作出具有可玩性的游戏,在学生自己动手制作游戏的过程中巩固和加深他们对游戏引擎的理解,让知识点与实践内容相辅相成。对于实践部分,掌握C#语法和面向对象程序设计思维是必备的前置知识。

我们对数字媒体专业学生的编程能力进行分析后,发现如下情况。1.学生的编程能力参差不齐。编程相关课程前后连接紧密,一旦某个知识点跟不上,后面的课程就会越落越远,导致部分学生失去信心,畏难情绪严重,在游戏引擎应用开发课中一旦遇到与编程相关的知识就会放弃。2 数字媒体专业学生尽管之前学过一些编程语言(C、Java),但并没有系统地学习Unity引擎所使用的C#语言,如果要学习Unity 引擎,就要快速上手C#语法。3.编程课程大都开在大一下学期和大二上学期,而数字媒体技术专业课程内容繁杂,还有很多艺术方面的课程要学,到了大三,学生之前培养起来的编程能力已逐渐退化,需要复习巩固。

游戏引擎应用开发课程对学生的编程能力有一定要求。Unity 引擎为开发者提供了三维渲染、物理碰撞、移动旋转等游戏开发的核心功能,因此其不需要使用者掌握复杂的图形学、数学、物理学知识,但游戏对象的行为逻辑需要用C#语言来编写,这就需要使用者掌握基本的C#语法,包括控制流语句、变量、函数、类,等等。同时,游戏开发中充满了游戏对象间的交互,在设计脚本的时候,需要使用面向对象程序设计思维,熟练运用继承、多态等特性去设计游戏脚本,否则游戏程序将会混乱不堪,难以维护和修改。总之,越是熟悉C#语言和面向对象程序设计思维,在游戏开发中就会越得心应手。

同时,课程后期还涉及不少需要一定编程能力和计算机知识才能做出的实践内容。在以往的课程教学中笔者发现,在涉及单例模式、对象池、游戏的AI状态机等内容时,学生的学习和实践存在一定的障碍,但大一、大二编程基础课中动手能力较强、编程基础较好的学生在上述内容的学习中往往掌握得比较快。

可见,做好游戏引擎应用开发的课程衔接是十分有必要的。我们需要一个学时短且高效的课程帮助学生快速掌握C#语法,还要通过实实在在的游戏案例重建学生对编程的信心,为学生建立“游戏编程其实并不难”的认知。另外,Unity 游戏引擎是一个封装好的复杂的系统,在学习引擎时仅仅了解引擎表层工具的使用是远远不够的,只有了解游戏引擎的内部运作才能去解决一些深层次的问题。作为游戏引擎应用开发的前置课程,该课程会带领学生在没有游戏引擎的情况下只用Console控制台去完成一个小游戏,让学生从底层的游戏循环开始了解计算机游戏的架构,为学生以后学习游戏引擎的底层原理奠定基础。

二、游戏引擎应用开发衔接课的设计

开设衔接课程是为了让学生有更好的编程语言基础和编程思维,以应对接下来游戏引擎应用开发课程中的编程部分。

游戏引擎应用开发衔接课并不需要像传统的C#编程课程一样将C#的语法知识点详细地学习一遍,学生只需掌握Unity 引擎游戏开发的必备基础编程知识就足够了。更深入的知识可以在游戏引擎的使用中边做边学。我们整理出了游戏引擎应用开发课程所必备的前置编程知识点:表达式、运算符、控制流语句、函数、类的封装、继承、多态、接口和泛型容器。

这些知识对数字媒体技术专业的大三学生来说并不陌生,然而在实践中学生往往不能充分地应用他们已经学过的知识。最常见的情况是,他们可能知道单个语句的语法语义,但是不知道如何将他们组合成有效的程序。例如,学生们都知道for 循环的语法,也知道如何接收输入的字符、设置控制台游标的位置,但让他们实现一个控制台小游戏中方向键控制角色(用字符代替)移动就没有思路了。出现这种问题的原因主要是大多数编程书籍上的内容往往都围绕着特定语言的知识,编程语言的教学也以讲授语法为主,学生学习时不能联系具体的应用场景,因而学生在学习编程语言语法时只知道知识点而掌握不了解决问题的方法策略。同时,参考书上的编程案例只针对某一具体的语法,缺乏知识点的前后贯穿,为避免这些问题,在衔接课中我们采用案例式教学。我们通过两个游戏案例,将Unity 游戏开发中所需要的知识点全部串联起来。这样,学生的学习会有一个明确的目标:完整地做出游戏;在学习特定语法时能够明确当前所学知识点是为了解决什么问题、完成哪个功能模块。

我们将游戏引擎应用开发衔接课设置为24 个学时,课程采用线上视频教学的形式,不同编程基础的学生可以有选择地学习,帮助即将学习游戏引擎应用开发课程的大三学生巩固编程知识,做到承上启下。

三、教学案例

课程主要使用案例式教学。我们将游戏开发中涉及的有关知识点梳理出来,根据这些知识点设计适合展现这些知识点的游戏案例,引导学生一步步完成游戏项目。每一个步骤都有相关的C#语法知识点,当游戏项目完成时,一个个零散的知识点就被串联起来了,从而让学生掌握C#面向对象编程的语法和编程思路,为接下来游戏引擎应用开发课程做准备。

作为案例的游戏项目叫《勇者救公主》,这是一个简化版《魔塔》类的游戏。该游戏是一个控制台应用程序,所有的游戏对象皆为字符。玩家通过ASDW 四个按键控制勇者在迷宫的移动并与魔王战斗,打败魔王救出公主。游戏流程和游戏界面如图1、图2所示。

为了保证知识点难度的循序渐进,我们使用两种思路来分别实现游戏——面向过程的思路和面向对象的思路。面向过程的实现方式涉及的语法知识点较为简单,对象为编程基础较差,甚至是没有编程基础的学生。该案例使用面向过程的程序设计思路,按照游戏的运行过程,仅使用控制流语句和函数这些面向过程编程的语法来实现游戏项目。这个案例会让学生着重理解表达式、运算符、控制流语句、函数还有游戏框架的帧循环。而面向对象实现思路的案例会用面向对象的思维将这个游戏重新实现一遍。在这个案例中我们不再讲程序的运行逻辑,而是着重讲解用类的概念,从游戏对象的属性和功能出发设计程序。面向对象案例侧重于类的概念、面向对象编程的思维方式、类的继承和多态等面向对象的核心知识。

在视频课程中,我们会将整个游戏的实现过程拆解为多个小问题,或者说是功能模块,按实现步骤让学生把问题解决,从而完成功能模块。我们尽量做到每个功能模块对应一到两个C#知识点,让学生循序渐进地接受知识。以面向过程的程序案例为例,游戏功能与拆分出来的小知识点对应关系如表1所示。

四、教学过程

教学过程以问题为主导。参考文献[10]中提出的教学方式——“学生们不仅仅是听讲座,他们还制定问题,设计自己的方法来回答问题并找到解决方案”,被后续很多教学研究证明是一种更为有效的计算机编程教学方式。我们的教学过程基于这样的方式:首先展示这个章节要实现的游戏功能,并提出学生实现该功能应解决的问题,这样学生就能明确当前的学习目标。接着,讲解这个功能所涉及的C#语法,当学生了解这些语法规则之后,鼓励学生运用这些知识制订方案以解决前面所提出的问题。如果学生无法独立完成,我们就提供功能模块实现的讲解视频供学生参考。这样学生就能够第一时间将知识点运用在游戏项目上,有利于他们更好地掌握和吸收已学的知识。然后,再布置一个关于这个知识点的拓展练习,让学生独立完成,以检查学生对知识点的掌握情况。

以面向对象实现思路案例中的战斗对象这个章节为例,这个章节需要实现的功能是玩家和不同种类敌人之间的战斗,需要学生在已经掌握的知识的基础上学习多态中的函数重载。首先,我们会对学生明确这个章节的目标——实现一个战斗管理类,这个类负责处理回合制战斗的逻辑,并且还要能处理玩家与不同敌人之间的战斗。不同的敌人有着不同的攻击方式,被打败之后也会有不同的处理方式。为了实现这个功能,我们会使用多态的知识点。其次,开始讲解多态让继承同一父类的子类们在执行相同方法时有不同的表现这一概念,再讲解如何用虚函数、函数重写、抽象类等多态语法来实现多态。最后,课程将带着学生将多态应用到实际的游戏案例中,让同一个父类中的攻击函数表现出不同的运算逻辑,实现魔王和小怪对玩家不同方式的攻击。当学生掌握这部分内容后,给学生布置一个作为拓展的思考题:击败一个小怪之后会随机出现三种掉落物,分别能强化玩家的不同属性,要求学生用多态的思想来实现这个功能。

五、总结

文章针对目前游戏引擎应用开发课程学生编程基础薄弱这一现状进行了分析,以衔接课程为切入点,用游戏案例的形式将使用Unity引擎所需要用到的C#知识点串联起来,以弥补学生的不足,同时让学生了解游戏程序的架构,为接下来的游戏引擎应用开发打下基础。在今后的教学实践中,笔者还需进一步了解学生对该课程的反馈,积极改进教学内容,以提升学生的学习兴趣。

猜你喜欢
引擎编程语法
点燃企业发展的“引擎”
打造信息化建设的“党建引擎”
玩游戏学编程,Blockly Games上手玩
车坛往事4:引擎进化之屡次失败的蒸汽机车
纺织机上诞生的编程
跟踪导练(二)4
编程屋完成数百元万天使轮融资
学编程,先画画
参考答案
One Engine Left只剩下一个引擎