貓和邊界可以改變的方塊 & 開始用 Bevy 吧|貓方塊開發日誌 #000


3樓貓 發佈時間:2024-04-07 15:32:24 作者:宏樓 Language

這是貓方塊的第一篇開發日誌,貓方塊是一個我們於 2023 夏季 BOOOM GameJam 開發的 GameJam 作品,開發團隊有兩個人:拉斯普(Aspirin)
、宏樓(Koiro)。你可以到我們的 itch 主頁試玩 demo 版本:https://gloridifice.itch.io/cat-with-blocks,如其名稱,這就是一個有關貓和邊界可以改變的方塊的解謎遊戲。
這個 Demo 用 Unity 開發完成,在覺得玩法還挺有趣的之後,我們兩個人都有繼續開發這個遊戲的念頭。直到最近,我們繼續了開發進程。或者說重新開始了開發進程,因為我們決定使用 Bevy 重構和繼續開發這個遊戲。
Bevy 是一個 Rust 遊戲引擎,如果你不瞭解,可以在官網瞭解更多:https://bevyengine-cn.github.io/
考慮到中文的 Bevy 實踐資料不算多(英文也不算多),我們想把我們用 Bevy 開發遊戲的過程記錄下來,或許能對其他人有幫助;另一方面,我們也希望認識一些遊戲開發的朋友;寫開發日誌的其它好處有很多,這裡不再多贅述了。

用 Bevy 吧

我們使用 Bevy 的原因,一方面是出於兩個人的興趣;另一方面,兩個人受夠了 Unity 的苦。於是兩個人開始了受 Bevy 的苦的過程。這裡整理一些好的社區的 Bevy 開發資料和社區內容:
  • Unofficial Bevy Cheat Book: https://bevy-cheatbook.github.io/
  • Rust Game Development with Bevy:https://taintedcoders.com/
  • Bevy This Week:https://thisweekinbevy.com/

日誌

項目架構

我們對項目架構已經有了些想法;相對獨立的功能,我們放在了 crates/ 目錄下,例如 Tilemap. 遊戲的運行時測試,寫在 src/examples/ 裡,既能運行,也能當作 api 使用範例。項目架構部分多參考自 Bevy.

數據加載

Hello,這裡是 Aspirin。數據加載部分主要解決的問題是有些數據需要統一地在遊戲剛開始的時候加載進內存並且確保遊戲正式開始的時候全部加載完。Bevy 的 AssetServer 已經能確保異步地從磁盤上獲取資源,接下來只要等待這些資源全都加載完就好了。
Bevy 引入了 GameState 這個概念,用戶可以指定某些功能只運行在某個 State 下面。為了方便起見,我們定義了兩個 State:Loading 和 Game。在 Loading 階段完成這些需要加載資源的加載。
另一個問題是,怎麼等待所有的資源加載完呢。能想到的最樸實的方法是把這些資源的 Handle 全都存在一個列表裡面,然後不停地輪詢直到加載完畢。至於需要加載的資源,我寫了一個過程宏自動生成加載自己並把自己加入上面這個監視列表的方法。
由於 Bevy 方便的 Plugin 特性,這些自動生成的代碼可以被簡單地組合起來並且執行。
@Rasp

實現了 Tilemap 和自動連接

我們最初打算用 bevy-ecs-tilemap 這個庫,但是一方面因為這個庫維護不是那麼頻繁(從 bevy 0.11 到 0.12 等了好久,而至今都沒有 0.13);另一方面,這個庫也沒有製作瓦片連接相關的功能。所以我們自己做了 Tilemap 系統。實際上實現起來並不困難,但與 Unity 中的思想完全不同。
瓦片連接使用的是子瓦片連接的方式,這樣滿足連接條件只要畫 13 個瓦片變體,減少了許多工作量。簡單來說,就是將一個瓦片分為四個子瓦片,只需去考慮子瓦片的連接的可能性。或許會在未來宏樓的某篇博客裡詳細介紹這個話題。
@宏樓

TODO

接下來的工作主要集中在實現場景加載、關卡編輯器和遊戲邏輯上。

© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com