開発ブログ
プロジェクトの裏側にある、エンジン・ゲーム・ツールの設計判断についての記録です。何を試し、何を選び、なぜそうしたのか。
ゲームは自分のリポジトリへ:Hydroと最初のゲームを分離する
Hydro、エディタ、最初のゲームはすべて1つのリポジトリにありました。ゲームごとにリポジトリを分ける計画、その前にある16の結合、そして最初の5ステップ。
AIエージェントが読めるエンジンにする
Hydroには500以上のソースファイルと厳格な独自ルールがあります。ClaudeとローカルのQwenモデルが推測せずに作業できるようにした仕組みを紹介します。
ルール、ビュー、ゲームセッション:ゲームコードの構成
ジオラマRPGで、バトルの計算をGPUなしでテストでき、UIを単純に保ち、実行中の状態をシーン切り替えをまたいで維持するための構成。
ゲームコンテンツをデータに:HydroのScriptableObject
セリフ、アイテム、クエスト、敵をC++から、インスペクターで編集できるリフレクション付きの定義ファイルとテーブルへ移しました。
エディタから.exeへ:初めてのスタンドアロンビルド
ゲームコードをエディタから分離し、1つのプロジェクトを動かす小さなランタイムと、エディタのビルドボタンを用意。あえてまだアセットパイプラインは作りません。
街灯は一つのもの:シーンヒエラルキーと実行時UI
親子関係のあるエンティティと本物のUIシステムを、2つのシンプルな目標に沿って計画し、2日で実装しました。小さく保つための判断を紹介します。
Joltで歩けるジオラマ:カプセル、スロープ、ゲームプレイ用の形状
バウンディングボックスからJolt Physicsによる本物の3D衝突判定へ。そして、それをシンプルにした2つのルール。
トーンマップの「トゥ」を外した理由
ピクセルアートに大きく効く、小さなHDRの判断。暗部をアーティストが塗ったとおりに保つために。
ペラペラのキャラクターに影を落とす
太陽用のシャドウマップ1枚、光の方を向く影用のスプライト、そしてスプライトが自分の影で暗くならないための工夫。
3D空間にピクセルアートのスプライトを立てる:カード、カットアウト、深度
シーンを作り直さずに、平面の2Dの村をジオラマに変えた方法。スプライトごとの向きの設定、深度バッファ、そしてdiscard一つ。
実行時の状態はどこに置くか:ECSのコンポーネントのための4つのルール
設定、エンティティごとの状態、ライブラリが所有する状態、派生データ。Hydroではそれぞれの置き場所が一つに決まっています。一度決めたことで、ある種のバグがまるごとなくなりました。
56件の問題:エンジン全体のレビューで見つかったこと
機能を追加する前に、エンジンとエディタの約6,000行すべてをレビューしました。6件の重大なバグ、スワップチェーンの分割、そしてすべてのVulkanリソースのRAII化。
Hydroの4年間:Vulkanの三角形からエディタまで
Hydroは2022年7月、ウィンドウとバリデーションレイヤーから始まりました。何度も中断しては再開してきた個人プロジェクトの4年間を振り返ります。
お仕事のご相談はお気軽にどうぞ
東京在住です。Unity・C++・ゲームエンジン関連のポジション、C#・.NETのソフトウェア開発のポジション、そしてAIエージェントを活用した開発体制づくりに関心があります。英語・オランダ語・日本語(勉強中)で対応できます。