从零开始的 Godot 之旅 — EP7:会动的玩家角色
上一节我们学会了如何更优雅地实现角色移动,从本节开始,我们将正式制作一个俯视角RPG游戏。不过在此之前,我们需要先为游戏准备素材资源。
素材的重要性
一个完整的游戏制作,除了程序逻辑外,还需要美术、音效等素材。Godot 负责程序部分,而美术和音效则统称为素材。对于初学者来说,自己制作素材往往需要大量时间和专业技能,因此从素材网站获取免费资源是一个很好的选择。
寻找合适的素材网站
本节我们将从 itch.io 获取素材。itch.io 是一个知名的游戏素材分享网站,汇集了大量免费的游戏素材,包括图片、音乐、音效、模型等。
访问 itch.io,你会看到各种游戏、工具和素材信息。我们需要的是游戏素材,所以点击左侧的 Game Assets 分类。
Game Assets 分类中汇集了众多创作者上传的素材,其中很多都提供免费版本供学习和使用。我们选择进入第一个素材页面。如果找不到,可以直接访问:kenmi-art-cute-fantasy-rpg,这是一个专门为俯视角RPG游戏设计的素材包。
下载素材
进入素材详情页后,点击 Download 按钮开始下载。
下载前会弹出赞助提示框。如果你愿意支持创作者,可以点击 Sponsor 按钮;如果暂时不想赞助,可以点击 No thanks, just take me to the downloads 按钮继续。
在下载页面再次点击 Download 按钮,即可开始下载素材包。
下载完成后,你会得到一个包含丰富素材的文件夹,其中包括动物、敌人、场景物品、玩家角色、地图等各类资源。
至此,我们已经成功获取了所需的游戏素材。接下来,我们将使用这些素材创建一个会动的玩家角色。
创建项目并导入素材
首先,我们创建一个新的 Godot 项目,命名为 simple_rpg。
整理项目目录结构
为了保持项目的整洁和可维护性,我们需要先规划好目录结构:
- assets 文件夹:存放所有素材资源(图片、音频、模型等)
- scenes 文件夹:存放各种场景文件
- scripts 文件夹:存放脚本文件
- ui 文件夹:存放UI相关资源
- docs 文件夹:存放项目文档
这样的目录结构有助于项目的组织和管理。随着项目的发展,我们可以根据需要添加更多目录。
导入素材资源
将刚才下载的素材复制到 assets 文件夹中:
双击 player 目录下的 Player.png 文件,在右侧检查器中可以预览该图片的详细信息。
至此,我们已经成功导入了所需的素材资源。
创建玩家角色
我们创建一个2D场景,命名为 player,选择 CharacterBody2D 作为根节点。关于如何创建玩家角色的详细步骤,可以参考之前的章节。
设置角色贴图
给 player 节点添加一个 Sprite2D 子节点,然后将角色素材图拖入 Texture 属性。你会看到显示出了多个角色的图片,这些就是角色不同动作的每一帧图片。
配置序列帧动画
我们需要设置 Sprite 的动画属性来显示角色的特定帧:
检查我们的素材,这是一个 6×10 的序列帧图片,因此我们设置:
- HFrames:6(水平方向6帧)
- VFrames:10(垂直方向10帧)
Frame 设置为 0,表示显示第一帧的图片。
调整窗口大小和分辨率
将刚创建的角色实例化到主场景中,然后运行游戏,你会发现角色显示得特别小。这是因为我们还没有设置窗口大小和分辨率。
配置项目设置
点击菜单栏的 项目 → 项目设置 → 显示 → 窗口 → 大小,进行以下设置:
- 视口大小:480×270
- 窗口大小:1920×1080
理解窗口和视口的区别
为了更好地理解这些设置,让我们来区分一下窗口和视口的概念:
窗口(Window)
- 定义:窗口是操作系统级别的概念,指的是应用程序在屏幕上显示的实际窗口
- 特点:
- 可以调整大小、移动位置、最小化、最大化
- 受操作系统管理
- 可以超出游戏内容区域
- 通常以像素为单位
视口(Viewport)
- 定义:视口是游戏引擎内部的概念,指的是游戏内容实际渲染的区域
- 特点:
- 游戏逻辑和渲染的基准尺寸
- 决定了游戏内容的显示比例
- 通常以游戏单位为单位
- 可以独立于窗口大小
通俗理解
视口就是游戏的实际分辨率,就像你制作游戏时设定的画布大小。比如你设计一个角色是32×32像素,这个尺寸就是基于视口来计算的。
窗口就是游戏打开的大小,就像你双击游戏图标后,在屏幕上显示的那个方框的大小。窗口可以很大,但游戏内容(视口)可能很小,这样游戏画面就会被放大显示。
设置拉伸模式
在拉伸设置中,将拉伸模式设置为 viewport:
设置为 viewport 后,游戏画面会根据视口大小进行拉伸,而不是根据窗口大小进行拉伸。
调整完窗口和视口设置后,再次运行游戏,就可以看到角色已经正常显示了。
创建玩家的待机动画
现在我们的角色还是一个静态的图片,我们需要让它动起来。
添加动画播放器
回到 Player 场景,给 Player 节点添加一个 AnimationPlayer 子节点。
AnimationPlayer是一个动画播放器,它允许我们自定义设置每一帧的图片以及其他属性。
创建动画
选中 AnimationPlayer 节点,在下方点击动画面板,然后点击"新建动画"。我们创建一个名为 idle_down 的动画(向下的待机动画)。
设置动画轨道
点击"添加轨道"按钮,新增一个"属性轨道",选择 Sprite2D 的 frame 属性。
frame属性是Sprite2D的当前帧索引,即当前显示序列帧图片的第几帧。我们可以控制这个属性来让角色快速切换,实现动画效果(就像小时候翻书动画一样)。
配置关键帧
由于我们的素材中角色待机动画总共有6帧,我们将动画时长设置为0.5秒(即每0.1秒播放一个画面)。
在轨道的0.0位置点击右键 → 插入关键帧:
插入后可以看到轨道上0.0位置有了一个关键帧,显示frame为0的图片:
接着在0.1位置再插入一个关键帧,然后点击该关键帧,在检查器窗口将其值改为1:
以此类推,我们再插入4个关键帧,分别将它们的值改为2、3、4、5。
设置动画循环
最后,我们选中动画循环选项:
测试动画效果
点击播放按钮,可以看到角色已经开始播放待机动画了:
启用自动播放
不要忘记选中"自动播放"选项,这样当角色在场景中加载后就会自动播放待机动画:
最后运行游戏,可以看到角色已经开始播放待机动画了:
本节小结
本节我们成功完成了以下内容:
- 素材获取:从 itch.io 网站下载了适合俯视角RPG游戏的素材资源
- 项目搭建:创建了新项目并建立了清晰的目录结构
- 角色创建:使用 CharacterBody2D 创建了玩家角色,并正确配置了序列帧贴图
- 显示设置:理解了窗口和视口的区别,并正确配置了项目显示参数
- 动画制作:使用 AnimationPlayer 为角色创建了待机动画,让角色真正"活"了起来
关键知识点回顾
- 窗口 vs 视口:窗口是操作系统级别的显示区域,视口是游戏内容的实际渲染区域
- 序列帧动画:通过控制 Sprite2D 的 frame 属性,实现角色动画效果
- AnimationPlayer:Godot 的动画系统,可以创建复杂的角色动画
课后作业:继续讲角色左右和向上(背面)的待机动画制作完成。
下一节我们将继续完善玩家角色,让它能够响应键盘输入进行上下左右移动,并实现相应的移动动画。敬请期待!