我是Lem0,自学倡导者,执迷于“不务正业”,被批评“旁门左道”。我注册并使用简书,希望能够记录一些我记不住的事情,或者与大家一起共享知识,共同学习。
往期回顾(点击链接访问):
「从0开始:开发自己的游戏[0]」
「从0开始:开发自己的游戏[1]」
「从0开始:开发自己的游戏[2]」
在上一期教程中,我带领大家学习游戏项目文件夹下各子目录文件夹的用途以及素材规格。在本期教程中,我会开始讲解游戏剧情的制作,从本期开始的后续几期教程内容将贯穿游戏线性流程、游戏中的主线任务、支线任务等等游戏进程的制作。所以不妨请喜欢本系列教程的朋友们关注我,避免错过更新动态。
如果您没有看过之前的教程,或者在阅读本文时发现自己已经记不起以前的一些内容,建议您先查看往期的回顾,再继续本教程以确保效率。
3、学习造人 - 添加NPC和简单的游戏事件
在一个游戏中,游戏世界里的生物往往由玩家和NPC(不可操控角色)构成。玩家和NPC之间的交互已经是RPG游戏的固定模式之一,几乎每个RPG游戏都会设计或多或少的可交互NPC。甚至,类似于《辐射3》、《上古卷轴5》这样拥有庞大世界观的游戏中,NPC甚至对玩家有“情感”的概念,而且NPC的性格也决定了不同的NPC会对玩家的某一行为做出不同的反应。
在本期教程,我们就来试着添加NPC和简单的游戏事件。
那么什么是游戏事件呢?我给游戏事件的定义是:在游戏中,由玩家或者游戏逻辑本身触发的、为达到推动游戏进程或完成某个游戏动作的行为。比如,在商店完成一次交易、走进传送门传送到另一个地点、向NPC交还已经完成的任务等等都属于游戏事件。
比如,在我们第2期教程中已经完成的室内和室外地图建立一个移动事件——在室外地图的时候可以走进绿色屋顶的房间门,从而让玩家跳转到另一个场景——室内。
首先我们要切换编辑模式为“事件模式”。切换到事件模式之后,你无法绘制地图,并且地图被划分成不同的小方格。你可以在每个小方格中都建立一个游戏事件。
我们选中绿色屋顶的房子,在黑洞洞的拱形门洞上单击右键,选择快速新建特定事件,并在子菜单中选择门扉。
在弹出的窗口中,你可以选择门的样式——双击“门扉图像”。因为我们为墙壁上画上了拱形的门洞,因此我们在这里需要选择拱形门。
目标位置为玩家打开门后通向的地点。我们需要选择为室内地图的门口位置。如图:
完成后点击确定,一个门扉事件就已经被建立了。我们可以看到地图上,绿色房子的墙壁上已经出现了一个拱形门的方块。我们可以双击这个方块进而打开事件页。
我们来详细讲解这个被我们快速构建的门扉事件。这个窗口中,左上角的【名称】框中的名称可以随意编辑,这是为了防止开发者忘记这个事件的作用而进行的备注。
【出现条件】中为当前的游戏事件出现需要满足的条件。在这里我们不需要设置任何条件,因为这个门将一直存在,不需要达成特定条件才出现。而相反,其他一些事件可能需要设置出现条件——比如送信任务中,你必须接受了任务或者持有信件时,收信人才会出现在地图上。
【图像】为事件的图像,双击可以选择其他图像,如果设置成人形,就相当于建立了一个NPC。在某些情况下,你也可以设置图像为空,这样事件会存在在游戏中但不会显示出来,我们经常这样实现一些游戏逻辑,比如进入在两次进入城镇的时候根据剧情差异播放两首不同的BGM等等。
【自主移动】中可以为事件设置移动的方式。比如《口袋妖怪》中的NPC经常以不同的方式在地图上随机移动或按照指定的路线移动,就是使用这个功能模块达成的。在这个例子中,我们可不希望房门也随机移动,所以我们需要将移动方式设置为“固定”。在其他的几种移动方式中,“接近”的意思是不断接近玩家,在某些躲避游戏中也经常使用。
【选项】中有四个选项。其中步行动画的意思是该事件在移动的时候将行走图循环播放形成行走动画;踏步动画是即使该事件不移动也播放行走动画;固定朝向是该事件的朝向不会更改(比如如果该事件是一个NPC,那么勾选此项将导致NPC的脸只朝向固定方位);允许穿透是允许该事件和其他事件碰撞后穿过彼此,类似于其他游戏引擎中的“非碰撞体”概念。
【优先级】略过,你可以将鼠标悬停在选项上查看说明,很简单。
【触发条件】中有多种触发条件。你可以悬停鼠标在这一部分,来查看不同触发条件之间的区别。需要注意的是,触发条件和刚才说过的出现条件不同,即使没有达到触发条件,该事件还是会出现在地图上。但如果没有达到出现条件,则该事件是不会在游戏中显示和执行的。
在右侧的【执行内容】中,是该事件的“代码”。我之所以说RMVA这款游戏引擎适合初学者,就是因为它对不会编程的代码苦手很友好。这些代码本来应该由程序员编制,RMVA不仅简单地将代码命令化,而且还使用了大家熟悉的可读文本,而不是编程语言。
【执行内容】中的代码文本我们称为事件命令或事件逻辑。我们看看这个门的事件命令:
一旦事件被触发,事件命令就会按次序执行。在这个门扉事件中,首先会播放开门的声效,然后是一串“移动路线”指令用来播放开门的动画。紧接着玩家会向前移动一步。之后会播放脚步声的声效,并且进行场所移动,移动到室内地图的指定坐标。
我们可以将玩家的初始位置设置在室外地图上,然后测试游戏,走到绿色房子前,果然,主角打开了门并且进入到室内。
测试结束之后,我们来新建一个事件。在事件编辑模式下,双击一个空白的小方格建立一个新事件。在弹出的事件页中,我们选择一个看着顺眼的NPC图像。在右侧的【执行内容】列表中,我们双击空行,添加一条新的【事件指令】:显示文字。
我们双击角色肖像图来选择角色的面部肖像。如果大家还有印象,我在上一期教程中说过,角色肖像图储存在Graphics => Faces文件夹下。
我们在文字框中输入“欢迎你,冒险者。”
之后点击确定,完成文字显示命令的添加。这时,你的事件页应该是下面的样子:
之后我们可以设置该事件的【自主移动】类型为随机,移动的速度和频率都可以随机调整。完成设定之后点击确定关闭,一个新的NPC(其本质依然是游戏事件)就被创建好了。
测试游戏后,我们的玩家已经可以和NPC进行对话了:
至此为止我们就已经学习了游戏事件的创建。我们将在下几期教程讲解复杂游戏逻辑的实现。也就是事件指令中的【流程控制】部分和【条件控制】部分。
大家也可以随意测试其他的事件指令。比如我留一个小作业:创建一个NPC富豪,每次和富豪对话一次会获得100金币。创建另一个NPC乞丐,每和乞丐对话一次可以选择是否施舍乞丐,是的话则乞丐会提升主角1级。(关于如何选择施舍乞丐与否,你可以在事件指令中【信息】=>【显示选项】中完成设置)。
希望大家能够多多实践其他的事件指令,我重点只讲【流程控制】部分和【条件控制】部分。由于我工作繁忙,我尽量不涉及其他过于简单的内容。如果大家有任何疑问务必让我知道,我会尽快进行解答。如果您喜欢这一系列教程,或者对游戏制作产生了兴趣,请您关注我避免错过更新的教程。有任何疑问或者批评,烦请私信联系。
<a>素材公开计划:</a>如果本系列教程反响较好,我会逐步公开我制作游戏时用到的免费非商业授权素材,也可以推荐一些支持商业授权的素材网站(日本网站居多,需要VPN)。
<a>未来游戏计划:</a>请点击这个链接访问关于【未来游戏计划】的内容。
由于近期工作繁忙,教程的写作过程可能过于仓促,有任何没有看懂的地方或者疑问,请务必让我知道,我会尽量进行回复。如果您愿意支持我不断进行开源和创作,也可以稍稍打赏我一下,Lemo在这里谢过大家的关注,希望各位能够在这一系列小小的教程结束之后,完成自己儿时开发游戏的梦想。
我是Lem0,自学倡导者,执迷于“不务正业”,被批评“旁门左道”。与大家分享英语/编程/高效自学的所思所想。
已授权“版权印”进行版权保护。获取授权