撰写了文章 发布于 2020-04-21 15:13:47
Godot 游戏引擎简介
凉宫春日暖,荒木旧燕还。野火烧不尽,又见紫罗兰。
入门教程
Godot 是一款免费开源的游戏引擎(官方网站)。最近我用该引擎做了一个 Roguelike 游戏原型(Github 仓库),还写了一份教程(维基页面)。你的下一个问题是:Godot 好用吗?话分两头说。和商业引擎比,Godot 的能力是有极限的;但是根据个人经验,用来制作 2D 回合制游戏应该够用了,绘制图形界面和处理按键输入都很方便,引擎自带脚本编辑器,也可以用 Visual Studio Code 写脚本。本文不打算说服读者使用 Godot,而是分享一些使用感受,仅供参考。
图 1:接连便是难懂的话,什么“半径二十”,什么“对波左输”之类,引得众人都哄笑起来。
下载引擎,阅读文档和安装 VSC 插件
游戏引擎和导出模板(Export Templates)既可以从 官方页面 分别下载,也能够通过 Steam 获取两者的整合包,以及许多游戏示例。我先前花两周时间,通读了两遍 新手上路(Getting Started)。我建议先熟读这部分官方文档,再使用引擎。Godot 提供了两种脚本语言:C# 和 GDScript。我建议使用原生的 GDScript,把 VSC 作为文本编辑器(我的 VSC 设定),安装 `geequlim.godot-tools` 插件。原生脚本语言一方面和引擎配合更默契,另一方面呢——“士郎,英国有句老话:骑士挥剑就像吃面包。你还记得吃过几片吗?”——学语言也是一个道理。

图 2:用 VSC 写 GDScript。
节点和脚本
在 Godot 引擎里,游戏的基本元素是节点(Node)。一个根节点和它所有的子节点形成树状图,被保存为单个场景(Scene)。这个场景既能够作为单个节点加入树状图,又可以通过脚本导入游戏。比方说,下图左上角的 `MainScene` 是根节点,`MainGUI` 是场景,`InitWorld` 是普通的子节点。每个节点最多可附加一份脚本,用于扩展节点功能。

图 3:Godot 引擎界面。
GDScript 是动态类型语言,语法 类似 Python,又能添加 静态类型约束。为了在节点间传送数据,调用其它节点的方法,有三种常见手段。

图 4:使用相对路径或绝对路径获取节点。

图 5:调用节点组(Group)内所有节点的特定方法。

图 6:发布和接收信号(Signal)。
图形界面和输入
Godot 提供了几套工具,从不同层次制作图形界面和处理玩家输入。较底层的工具精确控制了每个界面节点的位置和大小,让某个节点响应特定的输入事件;但是对于常见的需求,偏顶层的工具用起来更方便。比方说,我们把所有图形界面节点放在一个场景里。标签节点(Label)显示文本,容器节点(Container)控制下属子节点的排列方式,通过尺寸标记(Size Flag)间接设置文本框大小。

图 7:图形界面的节点。
打开输入地图(Input Map),把多个按键输入(键盘、鼠标或游戏手柄)和单个行动(Action)绑定起来。然后让脚本响应引擎内置的事件。

图 8:封装玩家输入。

图 9:响应玩家输入。
差不多该结束啦。读过官方文档和我写的教程,应该足以做出一款简单的游戏。接下去只有靠各位自己了——“我所走的海路在我以前从未有人走过;弥涅耳瓦为我的船吹风,阿波罗为我掌舵,九位缪斯为我指出大小熊星。”(但丁)

图 10:乔鲁诺,你不准看,但是我允许你听个声音。
最后给大家念一首我喜欢的诗。
《令和元年春第三新东京市访友不遇》
千反良田万里江,小鸟游林未相忘。
真宫寺外早樱盛,今日凌波明日香。
OwenTsai 1年前
发布
JOel 1年前
发布