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下載任務