[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角

欢迎阅读Godot3平台跳跃游戏实践系列文章,本系列将从创建工程开始,记录一个平台跳跃小游戏的制作过程,文章中如有错误或不妥之处欢迎指出。

演示效果

上一篇文章中,我们了解到了Godot中精灵的初步使用、背景创建与多分辨率适配,本篇文章将围绕如何创建游戏的主角展开,本篇完成后的效果:

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第1张图片
运行效果

本篇涉及以下内容:

  • KinematicBody2D(运动学物体2D)的使用
  • AnimatedSprite(动画精灵)的使用
  • 碰撞体的创建
  • 音频的使用与音频总线

角色的组成

在Godot中,场景可以作为一个节点包含在另一个场景之中。就像一栋房子包含许多楼层,楼层包含许多房间,房间里又有许多家具等等,角色本身可以作为一个场景包含在关卡之中。这样做有什么好处呢?我们的游戏角色难免会包含一大堆各有用途的节点,而我们可能需要角色在不同关卡场景中出现,将角色打包成场景可以很方便的让角色出现在不同的关卡里,也更加便于我们统一管理,这与Unity中的预制体有些类似。

那么点击工作区上方的按钮新建一个场景,然后在Scene面板中点击Custom Node创建一个自定义类型的根节点。角色需要做物理运动,并且能被玩家控制,我们在新建节点对话框上方的搜索栏中输入"KinematicBody2D",双击创建节点。然后我们把这个场景保存一下,取名Player。

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第2张图片
创建KinematicBody2D节点

完成后应该是这个样子:

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第3张图片
创建好的Player场景

外形

现在Player场景里空空如也,我们首先来给角色制作外形。

图片素材导入

找到图片资源中玩家角色的的素材,你可以使用现在这一套素材(Kenny·Platformer Art Deluxe)里的那些小外星人。这里我使用了另外一套Kenny·Platformer Characters。

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第4张图片
Kenny·Platformer Characters

将角色相关的所有单独的图片素材导入到Godot中,而不是SpriteSheet文件。为什么呢,上一篇文章里不是说SpriteSheet大法好吗?额...其实是因为在当前版本(3.1.2),使用SpriteSheet制作角色动画相对麻烦一些。

3.2版本对使用SpriteSheet制作动画有了很好的支持。如果你所在的世界线Godot3.2版本已经发布了,那么直接用SpriteSheet文件就可以了。具体如何使用或许可以参考这里。

我不!我就要在3.1.2版本里用SpriteSheet做动画!那么请参考这里。

在File System面板中,res://Assets/Images下新建一个Players文件夹,将所有文件拖入。

导入之后可能要修改导入设置来避免显示模糊。这么多要一个个改那得累死,在File System中选中所有角色图片文件,在右侧Import面板中,Detec3D左侧打上勾,同时取消掉右侧的勾选,Filter项也是相同的操作,最后点击Reimport按钮重新导入。

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第5张图片
批量修改导入设置

创建动画精灵

我们创建一个动画精灵节点,在Scene面板中右击根节点,选择Add Child Node,在新建节点对话框上方的搜索栏中输入AnimatedSprite,双击创建。
接着点击右侧Inspector面板中的Animation属性,选择New SpriteFrames创建精灵动画。

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第6张图片
新建精灵动画

再次点击Animation属性,工作区底部出现了一个新的SpriteFrames面板。我们把File System面板中的角色站立图片往里一拖:

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第7张图片
拖入动画帧图片

可以看到角色已经出现在了工作区。这个素材里角色站立只有单独的一帧,所以站立动画就已经完成了,双击左侧的"default"将其改名为"idle"。

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第8张图片
完成的站立动画

我们点击面板左上角的新建按钮,继续新建一个行走的动画"walk",然后把所有角色行走图片往里一拖:

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第9张图片
新建行走动画

Scene面板中点击"AnimatedSprite"节点,在右侧Inspector面板中勾选上Playing属性,可以看到工作区中动画开始循环播放了。

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第10张图片
开启动画播放

SpriteFrames面板这里可以控制动画帧率与是否循环播放:

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第11张图片
控制帧率与循环播放

然后再依葫芦画瓢做好跳跃的jump动画,以及其他你喜欢的动画。

我想控制单独某一帧的持续时间,怎么破?当前版本的AnimatedSprite还没有提供直接的设置方法,但可以通过把某一帧重复个几次来实现。或者可以使用另外一种方法制作动画。

碰撞体

接下来看看根节点上一直被选择性忽视的Warning(听说程序员需要2.0视力才能看到这个标志):

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第12张图片
节点配置警告

Godot提醒我们,这个节点没有配置任何形状,它将无法与其他物体发生碰撞与交互,并且大发慈悲地将解决方法也告诉了我们:添加一个CollisionShape2D(碰撞形状)或CollisionPolygon2D(碰撞多边形)可破。

虽然角色的发型看起来十分多边形,但这里还是选择添加一个CollisionShape2D节点。然后在右侧Inspector面板中点击Shape属性,选择New CapsuleShape2D添加一个胶囊形状:

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第13张图片
创建碰撞形状

为什么是胶囊形状而不是其他形状?因为我们的角色已经在社会这条湍急的大河中被磨平了棱角。 因为对于当前这个人形角色,胶囊形状更加符合他的外形,并且在平台跳跃游戏中,胶囊形状可以避免角色被卡在一些奇怪的地方。

在工作区中通过这两个圆点来调整形状大小:

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第14张图片
调整碰撞形状

音效

游戏如果没有声音就太单调了,我们的角色也并不是一个安静的美男子,角色行动将会制造出一些动静,比如跳跃、发射子弹之类,这里先准备好角色的跳跃音效。

音频总线

为了更好地统一处理音频播放,我们来使用音频总线(Audio Bus)。音频总线可以控制所有经过它的音频音量、改变音频的音效,比如放大、失真、混响、均衡、环绕等等,有过音频处理经验的朋友对此一定不陌生。利用音频总线我们可以实现基本的总音量、音效、音乐音量分开控制,以及更多有趣的后处理音频效果。

那么首先新建一个音频总线来处理所有的音效,点击工作区底部的Audio菜单,在弹出的面板上方点击Add Bus按钮新增总线,取名为"SoundFX":

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第15张图片
新增音频总线

可以看到左侧已经有一个默认的音频总线"Master"了,它底部的"Speakers"表示它将输出到扬声器,而我们新建的"SoundFX"则是路由到"Master"。

这一步不是必须的,如果对音频没有太多需求,完全可以不创建音频总线,做人最紧要开心。

音频文件导入

在File System面板中,res://Assets下新建一个Sounds文件夹。这里先将角色的跳跃音效导入,找到跳跃音效文件(character-jump01.wav,目前仅支持wav与ogg格式),将其拖入文件夹中即可。

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第16张图片
导入跳跃音效

双击文件,右侧Import面板与Inspector面板中有一些关于音频的设置,如果是需要循环的背景音乐,则要启用循环(Loop)相关设置,这里我们保持默认就好。

音频流播放

回到Player场景,在根节点下新建一个AudioStreamPlayer节点。将刚才导入的音频文件拖入到Inspector面板的Stream属性中,同时Bus属性选择刚才创建的SoundFX音频总线。

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第17张图片
创建AudioStreamPlayer节点

这样准备好之后,我们就可以在需要时通过脚本来播放角色的跳跃音效了,这将会在下一篇文章中介绍。

将角色添加到关卡场景

记得将Player场景保存,然后通过工作区上方的选项卡切换回Level1场景(或者在FileSystem面板中打开它),在Scene面板中点击链接按钮,选择Player场景:

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第18张图片
实例化场景
[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第19张图片
实例化场景对话框

可以看到Player场景已经实例化为一个节点添加进来了,但其中的子节点是不可更改的。作为一个实例,我们之后在Player场景中的任何修改都会同步到这里。

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第20张图片
角色添加到关卡

感觉还不错,我们点一下右上角的运行按钮看看效果:

[Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角_第21张图片
运行效果

至此我们已经创建好了一个有头有脸的角色,但他现在还不能随着我们的指令动起来,下一篇文章将介绍如何控制我们的角色。

下一篇:[Godot3游戏引擎实践]平台跳跃小游戏(四)-玩家角色控制

你可能感兴趣的:([Godot3游戏引擎实践]平台跳跃小游戏(三)-创建游戏的主角)