Linux下尝试使用Godot开发小游戏
之前浏览资讯的时候,看到 Blender Studio 发布了一款名为 Dogwalk 的免费游戏,在 Steam 上试玩了下,牵着一条狗在地图上跑来跑去的,没搞明白也没有耐心玩完。
Blender 和 Godot 的结合倒是给人留下了印象,于是想到为什么不用 Godot 做个小游戏试试看呢?顺便学习下游戏开发相关的各种概念。
本文记录在 Arch Linux 下使用 Godot,按照官方示例开发 2D 游戏,并尝试发布到微信小游戏(结果失败,后文会讲原因)。
1. 安装游戏引擎 Godot
Godot 是一款多功能、跨平台的 2D 与 3D 开源游戏引擎,GitHub 标星都 105k 了,国内也有一众适合小游戏开发的引擎 Cocos、LayaAir、Egret 等,基本都不提供 Linux 版本,或者极少维护的状态,国内很多软件都这样,早已习惯。
优势是其中有些能直接导出成微信小游戏发布。我喜欢 Linux 和 Python,选择 Godot,玩票性质的。
1sudo pacman -S godot
若要安装其它版本,官网也能直接下载,解压后是个可执行程序,直接运行就好。
2. 开发 2D 游戏
官方文档有个 2D 游戏的教程,也有 3D 教程,没做过游戏开发,本人新手上路老实选 2D,跟着教程跑通了。
建议:
- 最好双屏,一个屏幕看文档,一个引擎开发,不用拖来拖去,来回切换,单屏真的累。
- 同时打开中文和英文文档,游戏开发有些特定术语,对比看更容易理解,少走弯路。
- 保持耐心,是文档总没那么理想,对新手来说,其中有些脚本更改逻辑,没有标注修改的是哪个脚本文件,要结合前后文自己判断到底在哪个文件做修改(主要是指 GDScript),也可以直接下载 dodge_the_creeps_2d_assets.zip,照着源码包看。
- 使用 Git 版本管理,这没什么好解释的
新手至少要操作几个小时的,跟着教程走完后,如下图所示:
标号 1、2 是游戏界面,分别为玩家和敌人,玩家通过键盘方向键控制移动,敌人会从屏幕 4 个方向随机出现,碰到即游戏结束,播放一段死亡音乐。
标号 3 是场景,在 Godot 中,游戏分解成可重复使用的场景。场景可以是一个角色、一件武器、用户界面中的一个菜单、一座房子、整个关卡、或者任何你能想到的东西,各个场景组成场景树,由主场景切入,场景会绑定 GDScript。像导演拍电影一样,各种花絮结合起来就是一个电影。
标号 4 是类似于电脑的文件系统,或者叫资源管理树,不多解释。
标号 5 是给场景的各种通用组建进行设定,比如颜色、字体、圆的半径、图片、和音乐绑定,信号连接等。
其它没标号的地方,点点看就明白是什么意思了。游戏引擎要模拟各种现实物件和逻辑,细究还是挺复杂的。
3. 导出游戏
Godot 支持导出到多个平台,如下图所示:
导出要下载额外的模板,会帮你选择最快的源下载,懒得截图了。
在 Linux 下,我测试了导出为 Linux 下的二进制可执行程序和 web 导出,二进制可正常运行;web 导出结果,使用 sudo caddy file-server 就能在浏览器上面打开游戏,也就是说,你可以把游戏放到你网站上去,有浏览器就能玩,这不就是就是页游么😅?
相比导出到微信小程序各种繁琐和无奈,不得不让人感叹还是标准 web 障碍少。
4. 尝试发布到微信小游戏
Godot 是不像地头蛇 Cocos,是不能直接导出到微信小游戏的,抖音小游戏倒是支持 Godot,但抖音要软著,个人开发者还限定使用场景,路都封死了啊!
所以下面只说,如何导出到微信小游戏:
这个开源项目:https://github.com/yuchenyang1994/godot-love-wechat 支持 Godot 导出到微信小程序。
看了下源码,默认是为 Windows 用户服务的😮💨,不过我尝试了下只需稍微改几行代码就能跑起来。 请看diff
1(godot-love-wechat) ➜ godot-love-wechat git:(main) ✗ git diff 24058f6 2035a376
2diff --git a/app/exporter.py b/app/exporter.py
3index db3d503..4056bff 100644
4--- a/app/exporter.py
5+++ b/app/exporter.py
6@@ -131,7 +131,8 @@ class Exporter:
7 export_path = export_settings["export_path"]
8 settings = self.storage.get("settings.json")
9 if settings:
10- wechat_execute = os.path.join(settings["wechat_execute"], "cli.bat")
11+ #wechat_execute = os.path.join(settings["wechat_execute"], "cli.bat")
12+ wechat_execute = settings["wechat_execute"]
13 result = subprocess.run([wechat_execute, "open", "--project", export_path])
14 print(result)
15
16diff --git a/app/stroge.py b/app/stroge.py
17index e90cf12..b1472ea 100644
18--- a/app/stroge.py
19+++ b/app/stroge.py
20@@ -1,9 +1,11 @@
21 import os
22 import json
23+from platformdirs import user_data_dir
24
25 class Storge:
26 def __init__(self) -> None:
27- self.path = os.path.join(os.environ['LOCALAPPDATA'], 'godot-love-wechat')
28+ self.path = user_data_dir("godot-love-wechat")
29+ os.makedirs(self.path, exist_ok=True)
30
31 def save(self, file, data):
32 print(self.path)
就是改动默认存数据的目录和启动微信开发者工具的逻辑,作者都是写死只支持 Windows,还有就是安装一些 pywebview 的一些 gui 包。实在搞不懂就问 AI 或者通过公众号联系我。
1(godot-love-wechat) ➜ godot-love-wechat git:(main) ✗ cat pyproject.toml
2[project]
3name = "godot-love-wechat"
4version = "0.1.0"
5description = "Add your description here"
6readme = "README.md"
7requires-python = ">=3.12"
8dependencies = [
9 "boto3>=1.37.8",
10 "nicegui>=2.9.0",
11 "nuitka>=2.5.9",
12 "pillow>=11.0.0",
13 "pyinstaller>=6.11.1",
14 "pywebview>=5.3.2",
15]
配置数据真实存放目录:
1➜ ~ cd .local/share/godot-love-wechat/
2➜ godot-love-wechat ls
3projects.json settings.json
4➜ godot-love-wechat cat projects.json
5[
6 {
7 "id": "e7d0f48436b2484a82d8c2ae514a2d35",
8 "name": "dodge-the-creeps",
9 "path": "/home/mephisto/github/dodge-the-creeps",
10 "version": "",
11 "description": "",
12 "icon": "/home/mephisto/github/dodge-the-creeps/icon.svg"
13 }
14]⏎
15➜ godot-love-wechat cat settings.json
16{
17 "godot_execute": "/bin/godot-4.4.1",
18 "wechat_execute": "/usr/bin/wechat-devtools",
19 "cdn_endpoint": "",
20 "cdn_access_key_id": "",
21 "cdn_secret_access_key": ""
22}⏎
23➜ godot-love-wechat pwd
24/home/mephisto/.local/share/godot-love-wechat
你是不是和我一样,心里美滋滋以为跑起来就万事大吉?错,更多痛苦在后面。
按照作者的仓库文档指引和 B 站视频,我是连续几天空闲时间折腾,包括降级 Godot 版本(4.5.1->4.4.1)、Skyline、微信开发者工具调试基础库切换、导出模板 4.5.1 适配(期间还要源码编译 Godot,仓库大下载慢等,怎么适配?文档不清晰),最后效果只能达到如下图所示:
点上面标号 1 的地方(游戏开始按钮),游戏是正常运行的,能听到背景音乐和碰撞后游戏结束的声音,但画面是黑屏的,iPhone 手机预览也无法正常运行。问 AI 说是 webgl 渲染问题,新手只能表示无奈,挣扎到此结束了。
建议切换 Windows 系统导出到微信小游戏,我已经不用 Windows 好多年了。
此外,还有人弄了个导出助手,走商业路线的,表示理解。
我只希望后来者,看到我这个记录,能有点帮助少踩坑,至少我让这个开源导出软件在 Linux 下运行起来,还没有人写过 Linux 平台下的导出相关文章。
希望有一天冒出个高手,扫平障碍,抑或等腾讯像字节那样官方支持 Godot 导出到小游戏,目前看起来比较难。
版权申明:
- 未标注来源的内容全部为原创,未经授权请勿转载(因转载后排版往往错乱、内容不可控、无法持续更新等);
- 非营利为目的,演绎本博客任何内容,请以'原文出处'或者'参考链接'等方式给出本站相关网页地址(方便读者)。
相关文章:
- Rofi试用
- 我的工具箱
- Arch 重装记录
- Labwc更换定制皮肤
- 网站导航栏防止插入Adsense自动广告
- Arch核显下如何愉快玩Dota2和CS2
- Rime添加dota2词库
- Supertuxkart iOS版终于发布了
- Arch linux dae 透明代理
- Airflow接管galler-dl下载任务