Hybrid Entity Component System

理論よりも実用を ― Component指向とECSの融合設計

Profile

開発環境

専門学校に入学するまではプログラミングに触れておらず入学後から勉強し、ゲーム制作をしてきました。主な言語はC/C++でほかにもC#やPython、VBA、PHPなども学びました。 DirectXは11と12に触れOSはWindowsでMSVS2022MSVS2026を使いネイティブ開発をメインに勉強しています。

開発履歴

1年次のチーム制作での作品、2Dアクションゲームです。 私は武器と魔法とサブシステムを担当しました。

ゲームの特徴は、3つの武器種による有利不利関係と、魔法による攻略の幅です。 また、世界観にもこだわり各ステージに落ちる収集アイテムを集めることで、全貌が明らかとなっていく要素を取り込みました。 3つのステージにはボスもおり、演出にこだわっています。 さらにゲームパッドにも対応しており、快適に遊べるようになっています。

私の担当である、武器は上、正面、下に攻撃でき左右どちらでも出せるようにしました。 さらに、溜め攻撃もありそれらパラメータとモーションを作成しました。 武器のモーションに合わせたエフェクトや消失時パーティクルなども取り入れました。 そして、9つの魔法を作成し、それらのパラメータの作成もしました。 遠距離攻撃の魔法弾は、敵の位置を受け取ることで追尾するようにしました。 サブシステムでは、複数のサウンドをフライウェイト形式で管理し シングルトン形式で扱いやすくしたシステムや、 セーブデータを外部ファイルにバイナリデータとして保存、読込可能にするシステムなどを開発しました。 これらは後の作品でも形を変えながら活用しています。

その時に作成した取扱説明書です。これも私が作成しました。

2年生に上がった当初に作成した2Dシューティングゲームです。 フレームワークは1年次に配布されたものを使用しました。

ゲームの特徴は、左クリックで発射した弾はプレイヤーが動かなければ同様に動かない仕様になっており、反対の右クリックでの弾は プレイヤーが止まっていれば動く仕様となっています。 また、プレイヤーが動かなければゲームの時間が進まないようになっています。

タイマーはフレームレートに依存しないようstd::chronoを使用しました。 shiftキーでスピードを落とし、細かな操作を可能にし、中心部の当たり判定を可視化する仕様になっています。 敵には画面上部から降ってくる敵と、自機のいる方向に反射してくる敵、ユーザのカーソルを避ける弾などがあります。 さらに、自機や敵のテクスチャ、破壊時のSEやBGMをユーザが自在に変更できる機能を付けました。

2年次に作成したゲームです。 題材は「2.5D」でしたが、次作の3Dゲームのために3Dゲームに挑戦しました。 フレームワークは2年次の配布されたものを使用しました。

ゲームの特徴は、4つのモードがありそれぞれの評価基準に沿って金、銀、銅の3つで結果を出します。 鉱石であれば左クリックでつるはしを振りクリスタルを獲得し、右クリックで宝箱を取ります。 あっていればコンボ数が増加し、それに応じてUIの変化やSEの変化、ゲームスピードの変化が起こります。 1回のミスもしくは一定時間の経過でコンボがリセットされます。 ミスはテンションゲージを消費し無くなるとそこまでです。

内部的には警告とマジックナンバーを0にしました。 そして、#ifなどのプリプロセッサを使用してデバック用と製品用でのビルドを分けました。 他には、モデルとテクスチャをフライウェイト形式で管理するシステムや ウィンドウ非アクティブ時のキー入力無効化などを実装しました。

2年次に作成した作品です。 この作品は次の3年に向けての技術習得用として作成しました。

ゲームの特徴は、魚の主人公が障害物をよけながら右に進むものとなっています。 川では主人公の体力と酸素を回復することができます。 酸素が尽きるか回復が尽きるかでゲームオーバーとなってしまいます。

この作品ではオブジェクトリストを役割別にすることで当たり判定の対象を最小化したり、まとめて削除したりできるようにしました。 また、可変フレームレート機能の追加やウィンドウ非アクティブ時のフレームレート低減、さらに外部ライブラリの自力での導入など行いました。これには CMakeを使用するなど大きな経験となりました。

また「Miner」と「Go Across」はマウスのみまたはキーボードのみで操作が完結するように設計し、単純さをコンセプトに制作しました。

全履歴

  • 個人開発 期間:2023年7月~8月(1か月)
    使用技術:C/C++(MSVS 2022)
    内容:2Dアボイドゲーム
  • チーム開発 期間:2023年10月~2024年1月(3か月)
    使用技術:C/C++(MSVS2022)
    内容・役割:2Dアクションゲーム(3つの武器、9つの魔法、サブシステム)
  • 個人開発 期間:2024年4月~5月(1カ月)
    使用技術:C/C++(MSVS 2022)
    内容:2Dシューティングゲーム
  • 個人開発 期間:2024年5月~6月(1か月)
    使用技術C/C++(MSVS 2022)
    内容:3Dカジュアルゲーム
  • Game Jam(チーム開発) 期間:2024年7月(3日間)
    使用技術:C/C++(MSVS 2022)、Effekseer
    内容・役割:3Dシューティング(弾、サブシステム)
  • 個人開発 期間:2024年7月~2025年1月(6か月)
    使用技術:C/C++(MSVS 2022)、hlsl(DX11)、Git
    内容:3Dアボイドゲーム
  • Game Jam(チーム開発) 期間:2025年7月(3日間)
    使用技術:C/C++(MSVS 2022)、Git
    内容・役割:3Dアボイドゲーム(UI、サブシステム)
  • 個人開発 期間:2025年7月~8月(1か月)
    使用技術:C#(Unity)、Git
    内容:2Dアクションゲーム
  • 個人開発 期間:2025年4月~2026年1月(9か月)
    使用技術:C/C++(MSVS2026)、Python、hlsl(DX12)、Git
    内容:開発支援環境

個人活動

現在では、私が個人的に遊んでいるVRChatでのユーザが開発を楽しめ、品質を高められるようなUnityの拡張機能をBOOTHで販売または配布を行っています。
BOOTH: Falcon-Store

GitHub: falcon626
NoteBookLM: 要約

Introduction

Hybrid Entity Component System(Hybrid ECS) は、 ゲーム開発において「コンポーネント指向のエディタでの操作性」と「ECSの三つの要素にコードを分割する明白性」を兼ね備える ハイブリッドアーキテクチャ です。

Concept – Hybrid

Hybrid(複合型)

Entity Component System(ECS)とはデータ指向の設計で、高速な処理を提供できます。 また多くの派生的な設計があり、有名なのはUnity DOTS(Unity ECS) やUnreal Engine(UE)のMass Framework、実用主義的なtiny-ecs、 オープンソースのEnTTがあります。
そしてHybrid ECSです。 これは内部はECS構造を採用しながら、エディタではコンポーネント指向的UIを提供します。 開発者は「ECSとして実行し、コンポーネントとして編集する」という 双方向のワークフローを得られます。

Contents

以下のページで、Hybrid ECSの各要素とエディタ機能を詳細に解説しています。