imog

主にUnityとかの事を書いています

GodotEngineで東方Projectキャラの首から下を当てるゲームを作った話

先月こんなゲームを作りました。

godotplayer.com

神子の彼女枠競争率高そう

首から上が表示されるので、下半身を4択から選んで正しいキャラを作るゲームです。失敗してもなんらかのキャラは生成されます。だいたいキメラです。

一ヶ月経ってしまったけど、せっかく作ったので裏側の話を諸々書いておきます。

きっかけ

元々GodotEngineで作成したゲームをアップロードできるGodotPlayerというサイトがありまして、そこでGodot1Weekという一週間でゲームを作るイベントが始まったので、普段はUnityをメインに使っているけどGodotEngineの勉強がてらなんか作るかなーと考えていました。

godotplayer.com

手元に東方キャラの素材があったのでそれを使ってプロトタイプの開発をDiscordで配信していたら、東方にそこまで詳しくない友人が霊夢魔理沙の二人を見て「ゆっくり組だ」と言いました。

東方にそこまで詳しくない友人が霊夢魔理沙の二人を見て「ゆっくり組だ」と言いました。

東方にそこまで詳しくない友人が霊夢魔理沙の二人を見て「ゆっくり組だ」と言いました。

その瞬間に首から下も叩き込んだろうという気持ちが沸き上がって2日で作りました。

ゲーム内容の話

ただの組み合わせゲームだけだと正解を当てるゲームになっちゃうので、せっかくならキメラを作れると面白いなあと思い、名前やスペカも分割することにしました。以下の5つの名称が首から上と首から下で分かれており、合成されます。

  • 名前
  • 二つ名
  • 能力名
  • スペルカード
  • BGM

これをやるためにはそもそも全キャラの上記データを用意する必要があるんですが、とてつもなく多い。気づいたらwin版と書籍合わせて132体もいるので打ち込むだけでもだいぶ大変です。

自分がやるとしても開発の時間をごっそり持っていかれてしまうので、信頼できる友人にデータの打ち込みをお願いしました。全作品遊んでて概ね把握している人だったので勝手に進めてくれたし、スペカはこっちのほうが切りやすいとか考えていい感じのものを選んでくれました。圧倒的感謝。

その結果生まれたのが以下のマスターデータです。今後なにかに使えるかもしれない。

docs.google.com

ちなみに立ち絵はdairiさんのものをお借りしています。

www.pixiv.net

開発当時は宮出口瑞霊の立ち絵がなかったので出さない予定だったんですが、なんと開発終盤で立ち絵が上がってきたので緊急で追加しました。これは運命です。

ちなみに旧作キャラも追加できたんですが、能力も二つ名もスペカもほぼないので組み合わせたときに上手いことキメラが誕生しなくなるので今回は見送りました。機会があればまた。

結果的には正解率を競うよりはおもしろキメラを作る楽しみのほうが勝ったけど、楽しいのでヨシ!

ちなみにタイトル画面のシルエットは実は毎回変わります。

開発の話

GodotEngineはちょこちょこ触りつつもちゃんとリリースまで出したものがないので、これを機にちゃんとサイクルが回ってるやつを作りました。

マスターデータ管理

マスターデータは上記のスプレッドシートからcsvに変換して、プロジェクト内に取り込んでいます。

csvの管理は godot-csv-data-importerを使いました。

github.com

これなら loadした時点でシンプルな配列になっているので便利。

ネタ管理

企画の内容とか実装のメモとか、文章を書くところをGodot内に集約しようと思い、godot-idea-boardを入れてみました。

github.com

雑なメモ

本当にメモ置き場とか図を書くためだけに使ったけど、GodotEngingeからアプリケーションを切り替えることなく書けるのは結構おもしろ体験でした。notionに書いてもいいんだけど、コンテキストスイッチが0になった感じがする。

首の分割

首から上と下がどのように管理されているのかというと、2つのシーンファイルが生成されています。

  • head_xxx.tscn
  • body_xxx.tscn

また、合体時には首がキレイに繋がってほしいのでheadとbodyはそれぞれ原点位置がおなじになるように調整しています。 1つのキャラクターを分割する手順は以下のとおりです。

  1. 手動で原点位置の調整
  2. 首のシーンを作成し、原点とUVを設定する
  3. 胴体のシーンを作成し、原点とUVを設定する

こんな手順を132個やらないといけないわけですが、これを愚直に全キャラ行っていると時間がかかりすぎて心が折れます。とはいえ画像ごとに首の位置はぜんぜん違うので、単純にUVの位置を基準に一律切り出してしまうと肩に顔が生えたり顔が2つになったりと見た目として大変よろしくありません。

ということで、この辺の処理を楽にできるようにプラグインを書きました。

首を切る

1枚絵のoffsetを設定して「首を分割する」ボタンを押すとhead_xxxとbody_xxxの2つのシーンファイルを生成するプラグインです。それぞれoffsetを基準に画像のUVと原点位置が調整されています。ちなみに名前は headhunting.gdです。

これのおかげで首の位置を調整するだけで済んだのでかなり時間短縮できました。ちなみにそれでも全キャラ30分はかかりました。

GodotEngineのエディタ拡張は初めてですが、エディタ用のコードみたいなのを覚える必要gなくGodotEngineのゲームコードと同じクラスが使えるので敷居はかなり低く覚えやすいです。例えばボタンひとつ置くにしてもエディタ用ではなくControlのButtonを生成すればいいだけです。

おわりに

やはりサクッと書くにはGodotEngineは使いやすくて楽しいなということを再度理解したのでもうちょっと扱えるようになっていきたい。

あとみんな遊んで欲しい。首から上しか知らない人もこれを機に首から下のことを知ってほしい。

上手に食べれてなくてかわいい