「新作ゲームのベースを作ってみる」の巻

Altnebula

Godotのチュートリアルや、Godot製のリリース済みのゲームたちを調査(遊びまくる)した結果、やはりどうしても自分でも手を動かしてゲームを作ってみたくなってきたので、家事と育児と仕事の合間を見つけながら、一日2時間までという縛りをつけて少しずつゲーム制作を始めております。

とはいえまだまだベース部分しか作れておりませんが、脳内ではゴールはもう見えているので、がんばれば2024年内にはリリース出来るかもしれません。

どんなゲーム?

ジャンルは「ローグライト+シューティングゲーム」な感じです。
昔ながらの縦シューに、ローグライト風味を付け加えた感じになります。
はい。もうおわかりですね。
皆さん大好きな、ヴァンサバライクなゲームです。

デッキ構築して自キャラをパワーアップしていく楽しさに、縦シューの良さをプラスして、ゲーム中にステージが移り変わっていく「旅感」を足していきたいと考えています。

タイトルはずばり「AltNebula」

ストーリー

西暦20XX年——
人類は外宇宙からの侵略者の影に怯えていた。

その名も「星雲捕食者(ヴォラシェイド)」。

有機生命体でありつつ、宇宙空間を航行する能力を有した異形の怪物たち。
彼らの群体(コロニー)が通過したあとには、ただ虚無のみが残されるという。

地球人類は、自らの所属する天の川銀河を守るため、あらゆる文明力を結集した最終兵器を開発。

「フレースヴェルグ」、「ヴィングトール」と名付けられた、
恒星間航行能力を有する2体の機体——

あなたの使命はこの2機のうちいずれかを敵コロニーの中枢へ送り届け、
「女王」を破壊すること——

愛する地球のため、片道切符だとわかっていても、
やり遂げねばならないことが、あなたにはある——

自機の能力

残念ながら、地球人類の全科学力をもってしても、ヴォラシェイドの持つ圧倒的な「生命力」の前には歯が立たない。
しかし科学者達はこのことを逆手に取り、あなたの駆る機体に「ヴォラシェイドの遺伝子を解析し、彼らの力を取り込む能力」を持たせることとした。

地球を出発するときは普通の機体であっても、ヴォラシェイドの遺伝子を集めることで、異形の能力を貪欲に取り込んでいく。
——例えそのことにより、自ら異形に近づいていくことになったとしても。
地球人類にとっては、それこそが唯一の生き残る道なのだ。

とまあ設定だけはできているものの……

まだまだ何にも着手出来てないのが現状です。
ここ数日で進捗あったのは以下の部分。

  • Godot4.3で新規プロジェクト立ち上げ
  • 自機用のドット絵を iPad + Resprite で描く(ドット絵初自作)
  • 自機用のドット絵をゲーム内に登場させてゲームパッドで動かせるようにした
  • 自機から自動で弾が発射されるようにした
  • 単純な挙動をする敵キャラをゲーム内に登場させて、自機の弾や自機と相互作用するようにした
    • 自機も敵キャラも、弾も全てArea2Dを継承させて作ってしまっているが、これをCharcterBody2Dにすべきかどうかは悩みどころ……
  • マスタデータをどう持つか検討
    • 色々あった(後述)けど、Sqlite3で持つことに決定
  • マスタデータからゲーム内にステージを召喚してテストプレイできるようにした

こんな感じですね。
まだまだ何も出来ていないに等しいですが、開発のPDCAサイクルは回せるようになったって感じです。
ちなみに「SteamDeckで問題なく遊べること」をリファレンスとしています。
Godot + SteamDeck はかなり相性のいい開発スタイルだと思います。
GodotでLinux向けにエクスポートしてからほんとに数秒でSteamDeckの実機でテストプレイできるので、開発がめちゃくちゃ楽しいです。
このあたりの環境構築の話も、いずれ単発の記事にしたいですね。

マスタデータ、どう持つのが正解なのか悩みまくった話

この件についてはUnityでもいつも頭を悩ませる部分です。
結論としてはやはり「RDBが一番しっくりくる」のですが、世間的には「Resource(.tres)に持たせる」とか、「スプレッドシートに書いてそれをプラグインで読み込ませる」とか色々なやり方があり、かなり頭を悩ませました。

  • 選択肢としては以下の通りでした
    • Resourceクラスを継承させたカスタムクラスを作る
    • csvで持つ
    • jsonで持つ
    • Googleスプレッドシートで持つ
    • CastleDBで持つ
    • Sqlite3で持つ
  • 全部試してみて、一番自分にとって扱いやすかったのが「Sqlite3で持つ」方式だったので、それで決定
    • 理由
      • Resourceクラスを継承させたカスタムクラスは、データ単体で見ると一番効率的だけど、全体を俯瞰したりする「一覧性」に欠けるので却下
        • スプレッドシートっぽく複数のResourceクラスを編集できるGodot用Pluginもあるにはあったけど、不具合が多くてマスタデータを取り扱うためには使い物にならなかった(編集する気がないセルが知らないうちに編集されちゃってたりした)
        • 自前でEditorスクリプトを組めば解決しそうだけど、そこに手間は取りたくない
      • csvもjsonも、自前でパーサーを作らなきゃいけなくてめんどくさそう。
        • そして前項同様、一覧性に欠ける
      • Googleスプレッドシートは、gitのバージョン管理の対象外になってしまい、管理が煩雑になるので却下
      • CastleDBは、長いことメンテナンスがされていなくて、最新のmacOSではアプリの起動すらできないので却下
      • Sqlite3は、DBBrowserを使えば自分でSQL書かなくてもスプレッドシート感覚で編集できるので気軽にRDBが扱える
        • よって採用

多分、このプロジェクトを作り始めてからこれまでで、一番きつかったのはこの「マスタデータをどう持つか検討」する部分ですね。

ちなみに最初に自分が参考にしたのはこのYoutube動画です。めちゃくちゃ参考になるのでGodotをこれから本格的にいじってみようと思っている人は一見の価値ありです。

この投稿者さん(Godotneersさん)のチュートリアル動画は、どれもめっちゃわかりやすい上に実用的なのでオススメです。

この動画内では「Resourceファイルにマスタデータを持ってそれを読み出す」方式が紹介されてるんですが、前述の通り自分のニーズとは微妙にマッチしてなかったので、この動画を参考にしつつ、独自の方式をとることとなりました。

ここまでで勉強になった点など

マスタデータ管理用に、自前でEditorスクリプトを書くことも試してみたのですが、その時に、CustomEditorが意外と簡単に作れるのがわかってよかったです。
いずれ本当に必要になったら、やってみて、ここに経緯をまとめます。

また、AssetLibタブで検索してみると、使えそうな AddOn がたくさんひっかかることも分かりました。(Sqlite3をGodotに読み込むための AddOn も、ここからインストールした次第です。)
有用な AddOn が見つかり次第、それもこのブログで紹介します。

2024年10月現在、世の中ではGodotを巡ってなにやら騒動が起こっているみたいですし、それについて無頓着でいるわけにもいかないなぁとも思ってはいるのですが、どうあれ「ゲームを作る仕組み」としてGodotが魅力的であることに変わりはありませんし、個人的には今後も使い方を勉強していきたいなぁ、と考えています。

コメント

タイトルとURLをコピーしました