今までWebやモバイルで業務系やツール系のアプリばかり作ってきた自分が、初めてゲーム開発に手を出してみました。
使ったのは Godot Engine。言語はGDScript。どちらも完全に初めてです。
作ったのは 退魔夜行サバイバー という、妖怪をテーマにした2Dローグライクサバイバーゲームで、iOS向けに開発しました。
なぜゲームを作ろうと思ったか
きっかけは単純で、「自分が遊びたいものを自分で作ってみたい」という欲求でした。
普段の開発は業務システムや個人のユーティリティアプリが中心で、どうしても「便利さ」や「効率」を追求する方向になります。それはそれで楽しいのですが、もっと純粋に「遊び」を作る体験をしてみたかったんです。
Vampire Survivorsが好きで、あのジャンルなら自分でも形にできるかもしれないと思ったのが直接のきっかけです。
もうひとつ大きかったのが、Geminiでスプライト画像を生成できるという技術ブログを見たことです。以前からゲーム開発に興味はあったものの、グラフィックを自分で用意するのがずっとネックでした。それがAIで手軽に作れるとわかって、一気にハードルが下がりました。
なぜGodotを選んだか
ゲームエンジンの選択肢としてはUnityやUnreal Engineもありますが、Godotを選んだ理由はいくつかあります。
- オープンソース。 ライセンス周りの心配がありません
- 2Dに強い。 今回は2Dゲームなので、2Dが得意なエンジンが合っています
- GDScriptがPythonライク。 Python経験があるので、とっつきやすかったです
実際、GDScriptの学習コストはかなり低かったです。Pythonに慣れていれば、構文で迷うことはほとんどありません。型ヒントも書けるので、ある程度の安心感もあります。
退魔夜行サバイバーの概要
ジャンルはいわゆるサバイバーズ系です。プレイヤーは見習い陰陽師を操作して、10分間、次々と現れる妖怪の群れを生き延びます。
主な特徴はこんな感じです。
- 操作は移動のみ。 攻撃は全自動。ジョイスティックで8方向に動きます
- レベルアップで3択の強化を選ぶ。 武器の追加・強化、パッシブスキルの取得など
- 武器は3種類 + 進化形態。 お札(射撃)、狐火(回転)、数珠(防御)。それぞれレベル8まで強化でき、条件を満たすと進化します
- 敵は7種類。 ひとつ目小僧から牛鬼のボスまで、時間経過で段階的に強くなります
- 8ビット風のドット絵。 和風の夜の神社参道が舞台です
1プレイ10分のアーケード感を意識しました。
8ビット風のドット絵。というのも大きなポイントです。ある程度の動きの不自然さなどもドット絵がコンセプトであれば逆に味が出るのかなと思いました。
Godot開発で感じたこと
シーン・ノードシステムが直感的
Godotの設計思想は「すべてがシーンとノードの組み合わせ」で、これがとても分かりやすかったです。
たとえば敵キャラクターなら、CharacterBody2Dの下にSprite2DとCollisionShape2Dをぶら下げて、スクリプトをアタッチします。UIもゲームオブジェクトも同じ仕組みで作れるので、一度理解すれば迷いません。
Reactのコンポーネント指向に近い感覚があって、Web開発の経験が活きた部分だと思います。
Autoload(シングルトン)でグローバル状態を管理
ゲーム全体の状態管理には、GodotのAutoload機能を使いました。GameManager、StatsManager、SaveManagerなどをシングルトンとして登録して、どのシーンからでもアクセスできるようにしています。
Webアプリでいうグローバルステートやコンテキスト(Context)に近い発想で、ここもすんなり理解できました。
データ駆動の設計にした
武器・パッシブ・敵のパラメータはすべてスクリプト内の辞書データとして定義して、ロジックとデータを分離しました。新しい武器や敵を追加するときにコードの変更を最小限にできるようにしています。
この辺りはWebアプリの設計経験がそのまま使える領域でした。
苦労した点
一番苦労したのは ゲームバランスの調整 です。
技術的な実装はWeb開発の延長で対処できることが多かったのですが、難しすぎず簡単すぎずと感じるバランスは試行錯誤の連続でした。敵の出現タイミング、武器の強化曲線、経験値テーブル。数値をちょっと変えるだけでゲーム体験がガラッと変わります。
これは業務系やルーツ系のアプリにはない種類の難しさで、新鮮でした。
Web開発の経験はゲーム開発に活きるか
結論から言うと、かなり活きた気がします。
- コンポーネント指向の考え方 → シーン・ノードの設計にそのまま応用できます
- 状態管理の知識 → ゲームの状態遷移やデータフローの設計に直結します
- データ駆動の設計 → 武器やキャラクターのパラメータ管理に使えます
一方で、ゲーム特有の領域もあります。物理演算、当たり判定、スプライトアニメーション、ゲームループの概念。この辺りは新しく学ぶ必要がありました。ただ、Godotはこれらを高い抽象度で扱えるので、物理エンジンの数学を深く理解しなくても動くものは作れます。
マネタイズについて
退魔夜行サバイバーは無料でダウンロードでき、アプリ内課金もありません。収益化の手段はAdMobによる広告閲覧のみです。
個人開発のゲームで最初から課金モデルを組むのはハードルが高いですし、まずは気軽に遊んでもらうことを優先しました。広告も極力ゲームプレイを邪魔しない形で、この手のゲームではよくある「リワード広告」を採用しています。
まとめ
GodotとGDScriptの組み合わせは、Web開発者がゲーム開発に入門するルートとしてかなりおすすめできます。
軽量で、学習コストが低くて、2Dゲームなら十分すぎる機能があります。何より「作っていて楽しい」という感覚が強かったです。業務システムの開発では味わえない、純粋なものづくりの楽しさがあります。
退魔夜行サバイバーはまだMVPの段階で、キャラクターの追加やステージの拡張など、やりたいことはたくさんあります。引き続き育てていきたいと思います。