概要
- 20年にわたりゲーム開発を続けてきた筆者の経験と哲学を紹介
- UnityやUnrealなどの大手ゲームエンジンを使わず独自ツールを活用する理由を解説
- C#を中心としたプログラミング言語選定やSDL3・FMODなどのライブラリ活用法を説明
- アセット管理・レベルエディタ・UIツールの自作と既存ツールの使い分けを提案
- クロスプラットフォーム開発やLinux移行の実体験を共有
20年続くインディーゲーム開発と独自ワークフロー
エンジンを使わない理由と哲学
- Unity や Unreal などの大規模ゲームエンジンを使わず、 独自ツール で開発する理由を重視すること
- 大手エンジンの 90%の機能が不要 であり、独自のゲーム性や操作感を実現するために自作システムを構築すること
- 商用エンジンの ビジネス的リスク (方針転換やアップデートによる破壊的変更)を避けるため、ツールコントロールを重視すること
- 問題発生時に 自力で解決 できる安心感と、将来の 保守性 確保を優先すること
- 小規模チームや個人開発においては、 必要最小限のツール自作 が効率的であることを提案
ゲーム開発におけるプログラミング言語選定
- C# をメインに使用し、かつては C++ も経験したが、C#の進化と利便性を評価すること
- 2025年のC#は パフォーマンス と 記述性 が大幅に向上し、 ホットリロード 機能も開発効率化に貢献すること
- 小規模チーム での学習コストの低さや、 リフレクション によるエディタツール開発のしやすさを重視すること
- C#のアクセシビリティ が、初心者でも急速に戦力化できる点を強調すること
システムレイヤーとライブラリ選定
- SDL3 をクロスプラットフォームな ウィンドウ管理・入力・レンダリング の抽象化レイヤーとして活用すること
- SDL3の GPU抽象化 により、DirectX・Vulkan・Metalなど主要APIに対応し、幅広いプラットフォームで動作すること
- SDL3の上に 独自C#ラッパー を実装し、プロジェクト間で再利用すること
- オーディオには FMOD を採用し、ダイナミックな音声制御が必要な場合は商用ツールも適宜利用すること
- 必要に応じて MoonWorks 等の代替ライブラリも検討すること
アセット管理とロード戦略
- アセットは 必要なときに必要な分だけ ロードする、シンプルな実装を推奨すること
- 小規模なピクセルアートゲームでは 全アセット一括ロード も現実的であること
- 大規模アセットの場合は オンデマンドロード・アンロード を実装し、メモリ効率を最適化すること
- 必要に応じて プリプロセス用スクリプト を自作し、ビルド時にアセット変換を自動化すること
レベルエディタとUIツールの設計
- LDtk、 Tiled、 Trenchbroom などの既存レベルエディタを活用しつつ、必要に応じて 独自エディタ も開発すること
- ゲームデータとエディタの 密結合 を重視し、特定用途に特化したシンプルなツールを自作すること
- UI実装には Dear ImGui を利用し、 即時モードGUI による軽量なエディタツールを高速開発すること
- C#リフレクション と組み合わせて、ゲームオブジェクトを自動でインスペクト・編集できる環境を構築すること
- 複雑なツールが必要な場合のみ、外部ツール(例:Trenchbroom)を併用すること
クロスプラットフォーム対応とポーティング
- かつては C#のJIT制約 のためC++への移植やBRUTE等のツールを利用していたが、 Native-AOT の登場でC#でも全主要コンソールに対応可能となったこと
- FNAプロジェクト の積極的な貢献により、C#ゲームのマルチプラットフォーム展開が容易になったこと
- SDL3 のプラットフォーム抽象化を活用し、幅広い環境で「そのまま動く」設計を推奨すること
開発環境の変遷とLinux移行
- 開発環境は Windows から Linux へ完全移行し、オープンソース・クロスプラットフォームツールの活用を推進すること
- Windowsの ビジネスモデルや操作性 への不満からLinuxへの移行を決断したこと
- 一部Microsoft製品(VSCode、C#、GitHub等)は継続利用しつつ、 Linuxユーザー増加によるオープンソース対応拡大 を期待すること
- 日常的なゲームプレイも Steam Deck などLinuxベースの環境で完結していること
このように、 大手ゲームエンジンに依存しない開発手法 は、独自性・保守性・柔軟性を重視するインディー開発者にとって、現代でも十分に現実的かつ魅力的な選択肢であると提案します。