Skip to content

reigithub/unity6-portfolio

Repository files navigation

Unity6Portfolio

Unity 6 を使用したゲーム開発ポートフォリオプロジェクト(モノレポ構成)

プロジェクト構成

Unity6Portfolio/
├── src/
│   ├── Game.Client/        # Unity クライアント (Unity 6)
│   ├── Game.Server/        # ゲームサーバー (ASP.NET Core 9)
│   └── Game.Shared/        # 共有ライブラリ (.NET + Unity Package)
└── test/
    └── Game.Server.Tests/  # サーバーテスト

アーキテクチャ設計


TL;DR

  • このプロジェクトは主に個人または小規模のUnityゲーム開発におけるスターターキットを目指して作成されています
  • コードの再利用性を高め、実装のしやすさや可読性、保守性が向上するような作りを意識しています
  • インゲーム/アウトゲーム共にマスターデータで動作しています(データ駆動型)(調整中の部分を除く)
  • アセンブリ分割によるモジュラー設計を採用し、MVC/MVP両パターンのゲームモードを共存可能
  • マスターデータ定義をGame.Sharedとして分離し、クライアント・サーバー間で再利用可能
  • 起動時のゲームモード選択画面から、異なるアーキテクチャのゲームを切り替えて起動可能

English version is here


環境構築

必要環境

項目 バージョン
Unity 6000.3.2f1 以上
.NET SDK 9.0 以上
OS Windows 10/11

セットアップ手順

クライアント (Unity)

  1. リポジトリをクローン
    git clone https://github.com/your-username/unity6-portfolio.git
  2. Unity Hub で src/Game.Client/ フォルダを開く
  3. 初回起動時、パッケージの復元に数分かかる場合があります
  4. Assets/ProjectAssets/UnityScenes/GameRootScene.unity を開いて再生

サーバー

cd src/Game.Server
dotnet restore
dotnet run

テスト実行

# サーバーテスト
dotnet test

# Unity テスト(Unity Editor内)
# Window > General > Test Runner

注意事項

  • NuGetForUnity経由でインストールされるパッケージがあるため、初回ビルド時にエラーが出る場合は再度ビルドしてください
  • Addressablesのビルドが必要な場合は Window > Asset Management > Addressables > Groups からビルドを実行

スクリーンショット

MVC: ScoreTimeAttack(スコアアタックゲーム)

タイトル ゲームプレイ リザルト
タイトル ゲームプレイ リザルト

MVP: Survivor(サバイバーゲーム)

タイトル ゲームプレイ レベルアップ
タイトル ゲームプレイ レベルアップ

シェーダー・エフェクト

トゥーンシェーダー ディゾルブエフェクト
トゥーン ディゾルブ

エディター拡張

エディターウィンドウ

データベース管理 ゲーム環境設定
データベースウィンドウ ゲーム環境設定

ゲームプレイ動画

MVC: ScoreTimeAttack

MVCゲームプレイ

MVP: Survivor

MVPゲームプレイ

シーン遷移・エフェクト

シーン遷移 エフェクト集
シーン遷移 エフェクト

エディターツール

エディターツール


アーキテクチャ概要

モノレポ構成

┌─────────────────────────────────────────────────────────────┐
│                     Unity6Portfolio                          │
│                      (モノレポ)                               │
└─────────────────────────────────────────────────────────────┘
        ↓                    ↓                    ↓
┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐
│   Game.Client   │  │   Game.Server   │  │   Game.Shared   │
│  (Unity 6)      │  │ (ASP.NET Core)  │  │ (.NET + Unity)  │
└─────────────────┘  └─────────────────┘  └─────────────────┘
        ↘                    ↓                    ↙
                    ┌─────────────────┐
                    │  共有DTO/IF     │
                    │  (Game.Shared)  │
                    └─────────────────┘

クライアント内アーキテクチャ

┌─────────────────────────────────────────────────────────────┐
│                        Game.App                              │
│              (エントリーポイント・ゲームモード選択)             │
└─────────────────────────────────────────────────────────────┘
                    ↓                    ↓
┌─────────────────────────────┐  ┌─────────────────────────────┐
│      Game.MVC.Core          │  │      Game.MVP.Core          │
│   (MVCパターン基盤)          │  │   (MVPパターン基盤)          │
│   GameServiceManager        │  │   VContainer/DI             │
└─────────────────────────────┘  └─────────────────────────────┘
            ↓                                ↓
┌─────────────────────────────┐  ┌─────────────────────────────┐
│  Game.MVC.ScoreTimeAttack   │  │    Game.MVP.Survivor        │
│    (タイムアタックゲーム)     │  │   (サバイバーゲーム)          │
└─────────────────────────────┘  └─────────────────────────────┘
            ↖                                ↗
               └──────────────┬──────────────┘
                              ↓
              ┌─────────────────────────────┐
              │         Game.Shared         │
              │  (共通ユーティリティ/DTO)    │
              └──────────────┬──────────────┘
                             ↓
              ┌─────────────────────────────┐
              │     Game.Library.Shared     │
              │      (MasterMemory等)       │
              └─────────────────────────────┘

機能一覧

  • ゲームモード選択システム: 起動時のタイトル画面から異なるアーキテクチャのゲームモードを選択可能
  • アセンブリ分割設計: MVC/MVPパターンを独立したアセンブリで管理し、循環参照を防止
  • クライアント・サーバー共有: Game.Sharedによりマスターデータ定義をクライアント・サーバー間で共有
  • プレハブシーン/ダイアログ遷移機能: async/awaitによる非同期シーン遷移
  • ステートマシーン実装: ジェネリック型コンテキスト付き、遷移テーブルによる状態管理
  • マスターデータ管理: Protobufスキーマ駆動、CLIツールによるクライアント・サーバー両対応のバイナリ生成
  • 各種ゲームサービス: オーディオ、シーン遷移、メッセージングなどの共通機能
  • DIコンテナ対応: VContainerによる依存性注入(MVPパターン用)
  • 戦闘システム: ICombatTarget/IDamageable/IKnockbackableによる統一的な戦闘インターフェース
  • 武器システム: 自動発射・地面設置型武器、汎用オブジェクトプール(WeaponObjectPool)
  • 敵AIシステム: ステートマシン駆動(Idle/Chase/Attack/HitStun/Death)、ウェーブスポーン
  • ECS敵システム: Unity DOTS(Entities + Jobs + Burst)によるハイブリッドECS実装、MonoBehaviour版とのInspector切り替え対応
  • アイテムシステム: ドロップ抽選、吸引機能、オブジェクトプーリング
  • ロックオンシステム: 自動ターゲット追跡、射程管理
  • セーブデータシステム: MemoryPackによるバイナリシリアライズ、自動保存
  • 認証・アカウント管理: ゲストログイン、メール連携、引き継ぎパスワード発行、セッション自動復元
  • ランキングシステム: スコア送信・取得、リアルタイム順位表示、Valkeyキャッシュによる高速レスポンス
  • アセット配信システム: Addressablesによるローカル/リモート切り替え、GameEnvironment連動、エディタ自動同期
  • CI/CD: GitHub Actions + Docker による自動テスト(クライアント773 + サーバー56 = 829テスト)、Unity Acceleratorによるキャッシュ最適化、Addressablesデプロイ自動化

機能詳細

ゲームモード選択システム
  1. アプリ起動時にGame.Appのタイトル画面を表示
  2. 選択されたゲームモードに応じて対応するランチャーを起動
  3. 各ゲームモードは独立したアセンブリで実装され、相互に影響しない
  4. ゲーム終了時はランチャーをシャットダウンし、タイトル画面に戻ることが可能
  5. ApplicationEventsによる疎結合なイベント通知(下位→上位アセンブリ)
アセンブリ分割設計
アセンブリ 役割 依存関係
Game.Library.Shared 共有ライブラリ(Unity/サーバー共用) MasterMemory, MessagePack
Game.Shared 共通ユーティリティ、インターフェース、DTO Game.Library.Shared
Game.App エントリーポイント、ゲームモード選択 Shared, MVC.Core, MVC.ScoreTimeAttack, MVP.Core
Game.MVC.Core MVCパターン基盤、GameServiceManager Shared
Game.MVC.ScoreTimeAttack タイムアタックゲーム実装 MVC.Core, Game.Client.MasterData
Game.MVP.Core MVPパターン基盤、VContainer Shared
Game.MVP.Survivor サバイバーゲーム実装 MVP.Core, VContainer
Game.Server ASP.NET Core API サーバー Shared
Game.Shared(共有ライブラリ)

マスターデータ定義ファイルを共有ライブラリとして分離し、以下のメリットを実現:

  1. クライアント・サーバー共有: 同じDTOをUnityとASP.NET Coreで共有可能
  2. 依存関係の明確化: 最下層に配置することで循環参照を防止
  3. ビルド時間短縮: 変更頻度の低いコードを分離することでインクリメンタルビルドを効率化
  4. バージョン管理: パッケージ単位でバージョン管理が可能

含まれるコンテンツ:

  • MasterMemory用マスターデータ定義クラス(AudioMaster, ScoreTimeAttackStageMaster等)
  • 共通Enum定義(AudioCategory, AudioPlayTag等)
  • 共有インターフェース、DTO

Survivorマスターデータ(11種類):

  • SurvivorStageMaster: ステージ定義(制限時間、初期武器等)
  • SurvivorStageWaveMaster: ウェーブ定義(出現タイミング、敵数)
  • SurvivorStageWaveEnemyMaster: ウェーブ内敵構成
  • SurvivorEnemyMaster: 敵ステータス(HP、攻撃力、移動速度等)
  • SurvivorPlayerMaster: プレイヤー基本ステータス
  • SurvivorPlayerLevelMaster: レベル別ステータス(吸引範囲等)
  • SurvivorWeaponMaster: 武器定義(タイプ、ダメージ、クールダウン等)
  • SurvivorWeaponLevelMaster: 武器レベル別ステータス
  • SurvivorItemMaster: アイテム定義(効果値、レアリティ等)
  • SurvivorItemDropMaster: ドロップ抽選テーブル
マスターデータ更新システム

クライアント・サーバー両対応のスキーマ駆動マスターデータ管理システム:

アーキテクチャ概要:

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│ Proto Schema    │────▶│ Game.Tools CLI  │────▶│ C# MemoryTable  │
│ (masterdata/)   │     │ codegen/build   │     │ クラス生成       │
└─────────────────┘     └─────────────────┘     └─────────────────┘
         │                      │                        │
         │              ┌───────┴───────┐                │
         ▼              ▼               ▼                ▼
┌─────────────────┐  ┌────────┐  ┌────────────┐  ┌─────────────┐
│ TSV データ      │  │Client  │  │Server      │  │MemoryDatabase│
│ (raw/*.tsv)     │  │.bytes  │  │.bytes      │  │ (実行時)     │
└─────────────────┘  └────────┘  └────────────┘  └─────────────┘

デプロイターゲット(ビットマスク):

ターゲット 用途
ALL 0 全ターゲット共通(Id, Name等)
CLIENT 1 Unityクライアントのみ(アセット名等)
SERVER 2 APIサーバーのみ(内部バランス値等)
REALTIME 4 リアルタイムサーバーのみ

更新方法(3つの選択肢):

  1. バッチファイル(推奨) - ダブルクリックで実行
scripts/masterdata/
├── build-all.bat/.sh      # Client + Server 両方生成
├── build-client.bat/.sh   # Client用のみ生成
├── build-server.bat/.sh   # Server用のみ生成
├── codegen.bat/.sh        # C#クラス生成
├── validate.bat/.sh       # TSV検証
└── export-json.bat/.sh    # JSON出力
  1. Unity Editor - MasterDataWindow(Project > MasterMemory > MasterDataWindow)

    • Game.Tools CLIを内部で呼び出し
    • コード生成、バイナリ生成、TSV検証がGUIから実行可能
  2. CLIコマンド直接実行

# C#クラス生成(Proto → MemoryTable)
dotnet run --project src/Game.Tools -- masterdata codegen

# バイナリビルド(TSV → .bytes)
dotnet run --project src/Game.Tools -- masterdata build --out-client ... --out-server ...

# スキーマ検証
dotnet run --project src/Game.Tools -- masterdata validate

クライアント側ロード:

  • Addressables経由でMasterDataBinary.bytesをロード
  • MasterDataServiceBaseMemoryDatabaseを構築

サーバー側ロード:

  • 起動時にファイルシステムからmasterdata.bytesを同期ロード
  • DIコンテナ経由でIMasterDataServiceを注入
データベース管理システム

PostgreSQLデータベースのマイグレーション・シードデータ管理システム:

マイグレーション:

scripts/migrate/
├── migrate-up.bat/.sh      # 保留中マイグレーション適用
├── migrate-down.bat/.sh    # ロールバック
├── migrate-status.bat/.sh  # 状態確認
└── migrate-reset.bat/.sh   # リセット(全削除+再作成)

シードデータ:

scripts/seeddata/
├── seed.bat/.sh     # TSV → DB シード
├── dump.bat/.sh     # DB → TSV ダンプ
└── diff.bat/.sh     # TSV差分比較

Unity Editor:

  • DatabaseWindow(Project > Database > DatabaseWindow)
    • マイグレーション操作(Up/Down/Status/Reset)
    • シードデータ操作(Seed/Dump/Diff)
    • スキーマ選択(master/user/all)

CLIコマンド:

# マイグレーション
dotnet run --project src/Game.Tools -- migrate up
dotnet run --project src/Game.Tools -- migrate down --steps 1
dotnet run --project src/Game.Tools -- migrate status
dotnet run --project src/Game.Tools -- migrate reset --force --seed

# シードデータ
dotnet run --project src/Game.Tools -- seeddata seed --tsv-dir masterdata/raw/
dotnet run --project src/Game.Tools -- seeddata dump --out-dir masterdata/dump/
dotnet run --project src/Game.Tools -- seeddata diff --source-dir masterdata/raw/ --target-dir masterdata/dump/
シーン/ダイアログ遷移機能
  1. 非同期処理(async/await)で実装
  2. 前のシーンが破棄されていても遷移履歴から再遷移が可能
  3. 現在シーンをスリープさせて次のシーンへ遷移でき、戻るとスリープ状態から復帰可能
  4. シーン実装は起動前/ロード時/初期化時/スリープ時/復帰時/終了時など様々なタイミングで追加処理を挟む事ができます
  5. シーンに任意で引数や戻り値を追加で設定できます
  6. 引数つきのシーンであっても、履歴から状態を復元して再度引数を渡して遷移する事が可能
  7. ダイアログ(オーバーレイ)は複数開く事が可能で、不正な挙動を防止するためにシーン遷移時に全て破棄されます
ステートマシーン
  1. ジェネリック型コンテキストを持ち、任意の型を指定できます。
  2. 各ステートからコンテキストを参照して、状態管理を行う事ができます
  3. 初期時に遷移テーブルを構築でき、各ステートがどのステートから遷移するかルールを設定できます。遷移ルールが1ヶ所に集約/可視化され保守性が向上します。
  4. 任意ステートから遷移先に指定できる特別なステートを設定可能で、適切な設定が遷移テーブルに無い場合に遷移が検証/実行されます。
  5. ジェネリック型のイベントキー型を指定でき、遷移イベント名をenum等で集約管理できます。遷移先ステート名と一致させると可読性/保守性が向上します。
  6. 通常のUpdateに加え、MonoBehaivior.FixedUpdate/LateUpdateにも対応。これにより物理演算やカメラ等の状態と相互に連携できます。
サバイバーゲームシステム(MVP)

戦闘システム

  • ICombatTarget: ダメージ・ノックバック・ターゲット機能を統合した戦闘インターフェース
  • IDamageable, IKnockbackable, ITargetable: 個別機能のインターフェース
  • 敵・プレイヤー共通の戦闘ロジックを実現

武器システム

  • SurvivorWeaponBase: 武器の基底クラス(ダメージ計算、クリティカル、発動率)
  • SurvivorAutoFireWeapon: 自動発射型武器(最寄りの敵に向けて弾を発射)
  • SurvivorGroundWeapon: 地面設置型武器(ターゲット位置に円形パターンでダメージエリア生成)
  • WeaponObjectPool<T>: 汎用オブジェクトプール(弾・エリア共通)
  • マスターデータ駆動(レベルごとのステータス・アセット変更対応)

敵AIシステム

  • SurvivorEnemyController: ステートマシン駆動の敵AI
  • 状態遷移: Idle → Chase → Attack → HitStun → Death
  • SurvivorEnemySpawner: ウェーブ管理・スポーン制御
  • NavMeshAgentによる経路探索

アイテムシステム

  • SurvivorItemSpawner: 敵撃破時のドロップ管理
  • ドロップグループ抽選(確率テーブルによるアイテム決定)
  • マグネット吸引機能(範囲内アイテムの自動回収)

プレイヤーシステム

  • SurvivorPlayerController: 移動・HP・スタミナ・無敵管理
  • ステートマシン: Normal → Invincible → Dead
  • アイテム吸引範囲のレベル連動

セーブデータシステム

  • SurvivorSaveService: ステージ進行状況・クリア記録の保存
  • MemoryPackによる高速バイナリシリアライズ
  • 自動保存(30秒間隔・バックグラウンド移行時)
  • 勝敗確定時の即時保存(データ整合性保証)

ランキングシステム

  • スコア送信: ステージクリア時に自動送信
  • ランキング取得: ステージ別トップ100表示
  • 自分の順位: リアルタイム順位確認
  • Valkeyキャッシュ: Sorted Setによる高速ランキング取得(5分TTL)
  • 本番環境: Cloud Run + Cloud SQL + Memorystore for Valkey
認証・アカウント管理システム

サーバー連携による認証・セッション管理システム:

認証機能 (AuthApiService):

  • ゲストログイン(デバイスフィンガープリント)
  • メール/パスワードログイン
  • ユーザーID/パスワードログイン
  • パスワード忘れ・リセット
  • トークンリフレッシュ(自動更新)

アカウント連携機能:

  • メールアドレス連携/解除
  • 引き継ぎパスワード発行(12桁)
  • 別端末へのデータ移行

セッション管理 (AuthSessionService):

  • トークンの暗号化保存(ローカル)
  • セッション自動復元(アプリ起動時)
  • デバイスフィンガープリント生成

UI実装:

  • SurvivorAccountLinkDialog: メール連携・引き継ぎパスワード発行UI
  • プロフィール表示(ユーザーID、レベル、認証タイプ)
アセット配信システム

GameEnvironment設定に応じてAddressablesのアセット配信元を切り替え:

対応環境:

GameEnvironment アセット配信元 用途
Local Local (StreamingAssets) 開発・デバッグ
Develop Remote (開発サーバー) 開発環境テスト
Staging Remote (ステージング) リリース前検証
Release Remote (CDN) 本番配信

切り替え方法:

  • CI/CD: 環境変数 GAME_ENVIRONMENT から自動設定
  • エディター: メニュー Build > Addressables > Switch Profile から手動切り替え

主な機能:

  • Addressablesプロファイル切り替えでLocal/Remote自動選択
  • 環境変数によるAPI接続先切り替え
  • Unity Accelerator によるライブラリキャッシュ共有
  • GitHub Actions でのアセットキャッシュ最適化

エディタ同期機能(UseExistingBuildモード対応):

  • CIビルド後、他の開発者がUseExistingBuildでプレイ可能
  • Play開始前にカタログ存在チェック、不在時は自動ダウンロード促進
  • index.json(catalogHash + ファイル一覧)でバージョン管理・差分同期
  • エディタ拡張: Window > Game Environment Settings からカタログバージョン確認/アセットダウンロード可能、アセットカタログ/ダウンロード済みを削除可能
CI/CD システム

GitHub Actions + Docker による自動化パイプライン:

テスト自動化:

カテゴリ テスト数 内容
クライアント EditMode 710 ユニットテスト
クライアント PlayMode 63 統合テスト
サーバー単体テスト 46 Service, Repositoryテスト
サーバー統合テスト 10 API統合テスト(Testcontainers)
合計 829 全パス

ワークフロー:

ワークフロー トリガー 内容
unity-ci-docker.yml push/PR メインCI(Docker/Linux)
unity-test.yml PR PR用テスト
code-quality.yml push/PR フォーマット・静的解析
server-test.yml push/PR, 手動 サーバーテスト + カバレッジ

キャッシュ最適化:

  • Unity Accelerator によるライブラリキャッシュ
  • GitHub Actions でのアセットキャッシュ共有
  • Docker イメージのレイヤーキャッシュ
その他
  • シーン遷移やオーディオ再生などの共通機能は主にゲームサービスとして分離されています
  • マスターデータエディタ拡張はTSVから簡単にバイナリを作成でき、TSV更新後すぐにデータをテストできます。これによって検証サイクルを早めています。テストしたバイナリをそのままビルドやアセット配信で使用できます。
  • インゲームシーンはPrefabシーン+Unityシーンで構成されており、ステージとなるUnityシーンはロジックから分離されています。その為、コード修正なしで新しいステージを追加できます
  • アウトゲームシーンは遷移挙動のカスタマイズ性を担保するため、全てPrefabシーンを採用しています

主なフォルダ構成

Unity6Portfolio/
├── src/
│   ├── Game.Client/                    # Unity クライアント
│   │   ├── Assets/
│   │   │   ├── MasterData/             マスターデータ(TSV, バイナリ)
│   │   │   └── Programs/
│   │   │       ├── Editor/             エディタ拡張
│   │   │       │   └── Tests/          単体テスト
│   │   │       └── Runtime/
│   │   │           ├── Shared/         共通ユーティリティ
│   │   │           ├── App/            エントリーポイント
│   │   │           ├── MVC/            MVCパターン実装
│   │   │           │   ├── Core/       基盤(Services, Scenes)
│   │   │           │   └── ScoreTimeAttack/
│   │   │           └── MVP/            MVPパターン実装
│   │   │               ├── Core/       基盤(VContainer)
│   │   │               └── Survivor/   サバイバーゲーム
│   │   ├── Packages/
│   │   ├── ProjectSettings/
│   │   └── Documentation/              スクリーンショット、GIF
│   │
│   ├── Game.Client.Linked/             # MasterDataブリッジ(.NET SDK形式)
│   │
│   ├── Game.Server/                    # ASP.NET Core 9 サーバー
│   │   ├── Controllers/
│   │   ├── Services/
│   │   └── Program.cs
│   │
│   ├── Game.Shared/                    # 共有ライブラリ
│   │   ├── Game.Shared.csproj          .NET プロジェクト
│   │   ├── package.json                Unity パッケージ定義
│   │   └── Runtime/
│   │       └── Shared/
│   │           ├── Enums/              AudioCategory等
│   │           └── MasterData/         マスターデータ定義
│   │
│   └── Game.Tools/                     # CLIツール(.NET 9)
│
├── masterdata/                         # Protobufスキーマ + TSVデータ
│
├── docker/                             # Docker構成
│   ├── unity-accelerator/              # Unity Accelerator キャッシュサーバー
│   ├── unity-ci/                       # Unity CI Runner (GitHub Actions用)
│   └── game-server/                    # Game.Server (ASP.NET Core + PostgreSQL)
│
├── docs/                               # 技術ドキュメント
│
├── scripts/                            # ビルド・フォーマットスクリプト
│
└── test/
    └── Game.Server.Tests/              # サーバーテスト

パフォーマンス改善・検証サンプル

シーン遷移機能
  • GameSceneService
    • 各種シーン遷移機能をTaskからUniTaskへ変更し、パフォーマンス改善を検証
    • イテレーション数: 10,000
    • CPU実行時間が約40%削減、ゼロアロケーション化、メモリ使用量100%削減

パフォーマンステスト

ステートマシーン
  • 改善項目

    • ステート管理をHashSet→Dictionaryに変更、ステート検索がO(n)からO(1)に改善
    • 遷移時のDictionary検索回数を削減、LINQ使用箇所を改善しアロケーション削減
    • メソッドのインライン化でオーバーヘッドを削減
  • 状態遷移のスループット向上

    • イテレーション数: 30,000
    • 遷移時間が平均15%短縮、スループットが平均15%向上
    項目 旧StateMachine 新StateMachine 改善率
    総実行時間 (ms) 44.848 35.295 1.27x
    平均遷移時間 (μs) 0.300 0.146 2.05x
    スループット (ops/s) 668,934 849,991 1.27x
  • 状態遷移のメモリアロケーション改善

    • イテレーション数: 10,000
    項目 旧StateMachine 新StateMachine 改善率
    メモリ (bytes) 2,760,704 1,290,240 2.14x
ECS敵スポーン位置計算(Sequential vs Burst並列Job)
  • スポーン位置のバッチ計算をECS + Jobs + Burstで並列化

    • 敵数が増加するほどBurst並列Jobの効果が顕著
    • 5,000体で最大20.3倍の高速化を達成
    敵数 MonoBehaviour (逐次) ECS+Burst (並列) 高速化倍率
    100 7.37ms 6.73ms 1.10x
    500 37.55ms 17.61ms 2.13x
    1,000 75.48ms 13.81ms 5.47x
    2,000 156.18ms 14.06ms 11.11x
    5,000 376.47ms 18.53ms 20.31x
  • 計測条件

    • 反復回数: 1,000フレーム(ウォームアップ100フレーム除外)
    • Burst並列JobはIJobParallelForによるマルチスレッド実行
    • MonoBehaviour側は逐次ループによるシングルスレッド計算

使用言語/ライブラリ/ツール

言語・フレームワーク等 バージョン
Unity 6000.3.2f1
.NET SDK 9.0
C# 9.0
cysharp/MessagePipe 1.8.1
cysharp/R3 1.3.0
cysharp/UniTask 2.5.10
cysharp/MasterMemory 3.0.4
cysharp/MessagePack 3.1.3
cysharp/MemoryPack 1.21.3
hadashiA/VContainer 1.17.0
NSubstitute 5.3.0
xUnit 2.x
Unity.Entities (DOTS) 1.4.4
Unity.Burst 1.8.27
Unity.Collections 2.6.4
Unity.Mathematics 1.3.3
DOTween 1.2.790
HotReload 1.13.13
JetBrains Rider 2025.3.0.2
Claude Code -

主なライブラリ・ツール採用理由

  • VContainer: MVPパターンにおける依存性注入(DI)コンテナとして。
  • MessagePipe: 疎結合なメッセージング処理(Pub/Sub)のため。
  • R3: 複雑な非同期イベント処理、保守性/再利用性の向上のため。
  • UniTask: Unityに最適化された非同期処理全般のため。
  • MasterMemory: ゲームロジックとデータを分離し、開発サイクルを効率化するため。
  • MemoryPack: セーブデータの高速バイナリシリアライズ。
  • xUnit: サーバーサイドテスト用フレームワーク。

アセット

  • 主にUnityAssetStoreのもので自作は含まれません
  • Unityちゃん: https://unity-chan.com/ (© Unity Technologies Japan/UCL)

制作期間

  • 約7週間 (2026/2/14時点)

今後の予定

  • ローカライズ対応(多言語)
  • PlayerLoopへの介入サンプル
  • リストのソート/フィルタ機能サンプル
  • マルチ解像度対応
  • マルチプラットフォーム対応

デモゲームについて

タイムアタック(MVC)

  • 制限時間内に全3ステージに配置されたアイテムを規定数集めるタイムアタックです
  • 動作環境: PC/マウス&キーボード
  • 操作: 移動(WASD), ジャンプ(Space), 走る(LShift+移動), カメラ操作(マウスドラッグ)

サバイバー(MVP)

  • VContainerを用いたMVPパターンで実装
  • ウェーブ制の敵を倒しながら生き残るサバイバーゲーム
  • 動作環境: PC/マウス&キーボード
  • 操作: 移動(WASD), ダッシュ(LShift+移動), カメラ操作(右クリック+ドラッグ), 手動発動武器(アイコンを左クリック), ロックオン(エネミーを左クリック)
  • 主要機能:
    • ユーザーアカウント作成
    • データ連携(メール/PW, 引継パスワード発行)
    • オプション(セーブデータ管理, オーディオ音量調整)
    • 自動攻撃武器システム(マスターデータ駆動)
    • ウェーブ管理(敵の段階的出現)
    • アイテムドロップ・吸引
    • ステージクリア・記録データ保存

ダウンロード

  • 実行形式: デモゲームDLリンク ※解凍できない場合は7Zipを推奨
    • GameStartボタンを押下するとリモートアセットをダウンロードします(約400MB)

詳細ドキュメント


ライセンス

LICENSE

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •