v2.1.0 · ドキュメント

Common Game System

Unity 6.3 LTS の PC シングルプレイヤー向けプロジェクトのための、ヘッドレスな C# 基盤フレームワークです。ヘッドレスとは、シーンではなくコードだということ — インポートしても Hierarchy は変わりません。セーブ/ロード、入力、シーン遷移、オーディオ、UI パネル、Tween、状態機械など 23 個のサービスが、自動の Bootstrap.Run() 1 つですべて立ち上がります。DI コンテナも、シーンに置くシングルトンも、ゲームスクリプト側の初期化コードも要りません。

Unity 6.3 LTSサービス 23 個アセンブリ 7 本サードパーティ依存 0IL2CPP 対応レンダーパイプライン非依存AI 対応
ドキュメントWiki — 全サービスをステップバイステップで

ここから

6 ステップで始める

CGS はシーンではなくコードです。インポートしてもシーンの Hierarchy には何も現れません — フレームワークは見えないところで働きます。目に見えるのは Welcome ウィンドウとデモシーンです。最短のツアーはこちら:

  1. 1Unity Asset Store から Common Game System をインポートします(Window > Package Manager > My Assets)。
  2. 2Welcome ウィンドウが自動で開きます。閉じてしまった場合は Tools > Common Game System > Welcome からいつでも再表示できます(Window > Common Game System > Welcome にもあります)。
  3. 3Welcome ウィンドウ上部の Open Demo Scene を押します。MotionLab シーンが開きます — セットアップは不要です。
  4. 4Play を押します。Tween のイージングギャラリーが動き、スケジューラのタイマーが進み、Tween シーケンスのショーケースが再生されます。
  5. 5Time Scale スライダーを 0 まで下げてみてください。ゲームプレイはその場で静止し、UI の時計スピナーだけが自分の Clock で回り続けます。
  6. 6Console ウィンドウを確認します。bootstrap complete (v2.1.0, 23 services) の 1 行が、すべてのサービスの起動を裏付けます。

オフラインで読みたい方へ — 目次と注釈付きスクリーンショットを備えたページ形式の PDF マニュアルを、パッケージ内の Documentation/CGS-Manual.pdf に同梱しています。

概要

パッケージの内容

エンジン

Unity 6.3 LTS(6000.3.11f1)· .NET Standard 2.1

サービス

23 個 — 最初のスクリプトが走る前に、自動ブートストラップ 1 つですべて立ち上がります

ランタイムアセンブリ

7 本 — Core(パッケージ参照ゼロの 18 サービス)+ Input / UI / Localization / Assets / AddressableScene / Bootstrap。使わない Unity パッケージ(Input System / uGUI / Addressables)を削除しても、依存アセンブリが自動的に外れ、Bootstrap はビルドを壊さずに安全にフォールバックします

サードパーティ依存

0 個 — Unity Engine と、Unity 公式(first-party)の Addressables / Input System / uGUI(2.0.0 以降はいずれも省略可能)のみ

スクリプティングバックエンド

Mono と IL2CPP の両対応。フレームワークは自前の保存ルール([Preserve] + モジュール単位の link.xml)を同梱しています。CI は push のたびに IL2CPP のスタンドアロンプレイヤーをビルドします

レンダーパイプライン

URP / HDRP / Built-in / カスタム RP のいずれでも動作します — フレームワークにレンダリングコードはありません

テスト

自動テスト 2,600 件以上を、パッケージ内に非表示のまま同梱。Welcome ウィンドウからワンクリックでインポートできます

デモシーン

MotionLab.unity — 開いて Play を押すだけ、セットアップ不要。Tween のイージングギャラリー、Tween シーケンス、スケジューラのタイマー、そしてゲームプレイを静止させながら UI の時計は回り続ける Time Scale スライダー

サンプル

Welcome ウィンドウからインポートできる 6 種 — 実行できるシーン 3 つ(UI Panel Stack · Save/Load + Seeded Random · Command Console)と、スクリプトテンプレート 3 つ(Scene Flow · Localization · RPG Starter)

マニュアル・ドキュメント

目次と注釈付きスクリーンショットを備えたページ形式の PDF マニュアル(Documentation/CGS-Manual.pdf)に加え、サービスごとの平易なリファレンスページ(Documentation/Modules/)

エディタツール

Welcome ウィンドウ(パッケージバージョンごとに 1 回自動で開きます。再表示は Tools > Common Game System > Welcome)+ ランタイム用の Service Debugger

ライセンス

プロプライエタリ — Unity Asset Store EULA

対象プラットフォーム

PC(Windows / macOS / Linux)、シングルプレイヤー

クイックスタート

最初のスクリプト — 20 行

フレームワークは自分で起動するので、呼ぶべき初期化コードはありません。下のスクリプトは貼り付けたままコンパイルできます — 最初のシーンの任意の GameObject に付けてみてください。

using CommonGameSystem.Core;
using UnityEngine;

[DefaultExecutionOrder(100)] // see "Consumer conventions" below
public sealed class MyGame : MonoBehaviour
{
    [SerializeField] private AudioClip mainTheme; // assign any music clip in the Inspector
    private IAudioService _audio;
    private IScheduler _scheduler;

    private void Start()
    {
        // Bootstrap already registered all 23 services before Start() ran.
        _audio     = ServiceLocator.Resolve<IAudioService>();
        _scheduler = ServiceLocator.Resolve<IScheduler>();

        _audio.PlayMusic(mainTheme, fadeInSeconds: 2f);
        _scheduler.After(3f, () => Debug.Log("Three seconds of game time later."));
    }
}

これだけです。あなたの Start() が走る前に、23 個のサービスはすべて登録済みです。

良い習慣

コード作法(Consumer conventions)

  • ServiceLocator.Resolve<T>() を呼ぶスクリプトには [DefaultExecutionOrder(100)] を付けてください。フレームワークはどのシーンスクリプトよりも先に起動します — この属性がその順序を運任せではなく明示的な契約にします。
  • Resolve は 1 回だけ、結果はキャッシュ。Resolve<T>() は毎回辞書引きです — Start() なら問題ありませんが、Update() では無駄になります。
  • IL2CPP でビルドする場合は、自作の設定・イベント・セーブデータ型をプロジェクトの link.xml に登録し、Unity のコードストリッピングから守ってください。
  • サービスを止めるのは 1 行です: ServiceLocator.Replace<IAudioService>(new NullAudio())。すべてのサービスに、同じ契約を守る Null(何もしない)実装が付属します。

リファレンス

23 のサービス

Logger

01
ILogger

ビルド構成ごとのログレベルとカテゴリフィルタを備えた分類ロギング。スレッドセーフです。

Object Pool

02
IObjectPoolService

IPoolable ライフサイクルによるプレハブのプーリング — カテゴリ別プール、プリウォーム、自動返却。

Time Service

03
ITimeService

Clock 単位の時間・一時停止・スローモーション — Gameplay / UI / Background の各 Clock が独立して進みます。

Event Bus

04
IEventBus

型安全な publish / subscribe。疎結合なゲーム全体のメッセージングを実現します。

Save / Load

05
ISaveService

JSON のスロットセーブ、安全なアトミック書き込み、バージョン付きマイグレーションフック。

Configuration

06
IConfiguration

型付きの設定グループ(オーディオ / グラフィック / 入力)。設定した瞬間に永続化されます。

Input Key Map

07
IInputKeyMapSource

Input Actions アセットを保持し、プレイヤーのキーのリバインドをセッションをまたいで保存します。

Input

08
IInputService

Input System のラッパー — アクションマップのコンテキストとキーのリバインド。

Audio

09
IAudioService

AudioMixer 上の BGM / SFX / ボイスチャンネル — プール化したソース、フェード、音量バインド。

UI Panel Stack

10
IPanelStack

パネルの push / pop、モーダル、ゲームパッド + キーボードのフォーカス制御。

Scene Flow

11
ISceneService

ローディング画面とキャンセルに対応した非同期シーンロード。Additive なロード / アンロードにも対応。

Localization

12
ILocalizationService

キー→文字列の参照とランタイムの言語切り替え — バインド済みテキストは再起動なしで即時更新。

Achievements / Stats

13
IAchievementService

ローカルの統計と実績。しきい値による自動アンロック、セーブサービス経由で永続化。

Scheduler / Timer

14
IScheduler

ポーズ / スローモーションに追随する After / Every / NextFrame タイマー + メインスレッドへのディスパッチ。

Tween / Easing

15
ITweenService

ポーズ対応の値トゥイーン — イージングカーブ 31 種、型を閉じた To / From オーバーロード。

Asset Provider

16
IAssetProvider

Addressables ベースの非同期ロード — 参照カウントとスコープ単位の自動アンロード。

Seeded Random

17
IRandomService

決定論的なシード付き RNG — 名前付き / フォーク可能なストリームと、セーブと整合するスナップショット / リストア。

State Machine (FSM)

18
IStateMachineService

ゲーム側が定義するコンテキスト型に対する、フラットな有限状態機械のファクトリ。ガード付き遷移対応。

Pushdown State Stack

19
IPushdownStackService

再開可能なゲーム状態スコープのスタック — ゲームプレイに重ねる会話、メニューの戻りスタック。

Tween Sequencing

20
ITweenSequenceService

Tween サービスの上に築く、順次 + 並列のタイムライン。流れるようなビルダーで組み立てます。

Addressable Scene

21
IAddressableSceneService

Addressables カタログからの Additive シーンのロード / アンロード — キー単位の参照カウント。

Deferred Event Queue

22
IDeferredBus

イベントをいまキューに入れ、任意の Flush() で publish — 例えば物理コールバックの外へ。

Command Registry

23
ICommandRegistry

ランタイムコマンドのレジストリ — 登録 / トークナイズ / 実行、履歴、補完。コンソール UI はご自身で。

各サービスには、平易な言葉で書かれたリファレンスページ(Documentation/Modules/)と、1 行で差し替えられる Null(何もしない)実装がパッケージ内に同梱されています。

仕組み

60 秒でわかる構造

  • DI コンテナはありません。静的な ServiceLocator が、サービスのインターフェースとインスタンスの対応を保持します。
  • あなたのコード: var audio = ServiceLocator.Resolve<IAudioService>() — 1 回だけ Resolve してキャッシュし、Update() の中では決して Resolve しないこと。
  • フレームワーク側: Bootstrap がすべてのサービスを生成し、依存はコンストラクタ経由で渡します。だから各実装は単体でテストできます。
  • ランタイムアセンブリは 7 本: Core にはパッケージ参照ゼロの 18 サービスが入り、その上に Input / UI / Localization / Assets / AddressableScene / Bootstrap が重なります。使わない Unity パッケージを削除しても、依存アセンブリが自動的に外れ、Bootstrap はビルドを壊さずにその登録をスキップします(UI パネルスタックは何もしない実装に切り替わります)。
  • すべてのサービスは差し替えも停止もできます。各サービスに Null(何もしない)実装が付属し、ServiceLocator.Replace<IAudioService>(new NullAudio()) の 1 行で、呼び出し側を一切変えずにオーディオをゲーム全体で無効化できます。
  • AI 対応: AI アシスタント向けの仕様書(Documentation/AI/AGENT.md)と 5 つのタスクスキルを同梱。Claude Code / Cursor / GitHub Copilot で使えます。

リリース

変更履歴

v2.1.02026-08-03

入門者のためのリリースです — CGS を初めて見る人が数分で使い始められるよう、ドキュメントとパッケージングを作り直しました。すべてのランタイムフォルダとリファレンスドキュメントが平易な英語名になり(Bootstrap、SaveLoad、Tween、…)、フォルダ名・ファイル名から旧内部番号のプレフィックスが消えました。目に見えるデモシーンを Assets/CommonGameSystem.Core/Demo/MotionLab.unity に同梱 — 開いて Play を押すだけ、セットアップ不要です。Tween のイージングギャラリー、Tween シーケンスのショーケース、スケジューラのタイマー、そしてゲームプレイを静止させながら UI の時計は回り続ける Time Scale スライダーを収録し、必要なのは組み込みの uGUI パッケージだけです。Welcome ウィンドウは「60 秒でデモを試す」を軸に作り直しました: パッケージバージョンごとに 1 回自動で開き、Tools > Common Game System > Welcome と Window > Common Game System > Welcome の両方から開けて、サンプルのワンクリックインポート、クイックリンク(PDF マニュアル / ドキュメント / 変更履歴 / モジュールリファレンス)、折りたたまれた環境チェックを備えています。サンプルは 6 種になりました — UI Panel Stack、Save/Load + Seeded Random、Command Console は実行できるシーン、Scene Flow、Localization、RPG Starter は手順つきのスクリプトテンプレートです。(Motion Lab はサンプルから常時表示のデモへ昇格しました。)目次と注釈付きスクリーンショットを備えたページ形式の PDF マニュアルを Documentation/CGS-Manual.pdf に同梱し、AI アシスタント用ファイルは Documentation/AI/ へ移動しました。2,600 件以上の自動テストは引き続きパッケージ内に同梱されますが、いまは非表示のままです — Welcome ウィンドウからワンクリックでインポートするまで、購入者のプロジェクトにコンパイルされることはありません。サービスは変わらず 23 個、サードパーティ依存は 0 個です。

v2.0.02026-07-30

ランタイムアセンブリを 7 本に分割したリリースです。単一だった CommonGameSystem.Core ランタイムアセンブリは 7 本になりました — Core(パッケージ依存ゼロの 18 サービスに、純粋な UI コントラクトを加えたもの)、Input、UI、Localization、Assets、AddressableScene、Bootstrap — 実際に使うものだけを参照できます。破壊的変更となるのは独自の asmdef を持つプロジェクトだけで、変わるのも references リストだけです: ソースの変更はなく、名前空間はすべて CommonGameSystem.Core のまま、Assembly-CSharp のプロジェクトには影響しません。使わない UPM パッケージ(Addressables / Input System / UGUI)の削除も正式にサポートされました: 依存アセンブリは — 同梱のテスト / サンプルアセンブリも含めて — defineConstraints により自動的に外れ、Bootstrap はその登録をスキップします(UI Panel Stack は NullPanelStack にフォールバック)。3 パッケージともデフォルトでは引き続き自動インストールされます。link.xml はモジュール単位になり、オプションアセンブリの IL2CPP 保存エントリはそのアセンブリと一緒に外れます。シーンロードのキャンセルには正直なコントラクトを与えました(動作としては破壊的変更です): 従来の「アクティベーションをブロックし、新しいシーンの OnEnable は決して走らない」という約束は、そもそも実装不可能でした — Unity はアクティベートされていないロードの後ろで AsyncOperation キュー全体を停止させるため、一度のキャンセルがそれ以降のすべてのシーンロードを、プロセスが生きている間ずっと凍結させていたのです。現在は、バックエンドへロードが発行される前のキャンセルは本当のキャンセルになります。発行後のキャンセルではシーン遷移は完了し、アクティベーションの前 — 遷移元シーンの購読者がまだ存在する時点 — で SceneLoadCanceled が publish されます。修正: エディタの Play 終了時の後始末が、何もしないまま静かに終わっていました(LIFO の Dispose チェーンより先にレジストリがクリアされ、実績のディスクへのフラッシュとアセットハンドルの解放も飛ばされていました)。SFX の自動解放が、実時間で再生されるオーディオに対してスケール後のゲーム時間で走っていました(現在は unscaled 時間で、ピッチも考慮します)。TimeServiceTicker は [DefaultExecutionOrder(-100)] を宣言するようになり、あなたのスクリプトがフレームの delta を巡ってこれと競合することはなくなりました。IConfiguration.Set<T> は、渡したインスタンスをその場でクランプする代わりに、プライベートなコピーを保存します。追加: InputServiceOptions.AlwaysEnabledMaps(コンテキスト切り替えをまたいで UI / Debug のアクションマップを有効なまま保てます)、IPanelVisual(オプトインのパネルフェードトランジションに加え、オプションがずっと約束していたモーダル背景)、GraphicsSettingsApplier(品質 / 解像度 / フルスクリーン / vSync / フレームレート上限が、実際に Unity へ届くようになりました)、ISaveStorageBackend(セーブの保存媒体を注入できます — 暗号化セーブ、任意の保存場所、Steam Cloud。新しい Steam レシピドキュメント付き)、FileLogger(再起動後も残る、オプトインのローテーション式ファイルログ)、さらに遅延書き込みの設定は、フォーカスを失ったときにもフラッシュされるようになりました。サービスは引き続き 23 個、サードパーティ依存は 0 個。自動 EditMode テストは 2,665 件です。

v1.15.02026-07-25

初回の公開リリースです。未公開に終わった 1.14.0 ビルド以降、Core のサービスが 3 つ増えました(20 → 23)。いずれも変わらず Bootstrap.Run() 1 回で立ち上がります: Addressable Scene(IAddressableSceneService — Addressables カタログからの非同期な Additive シーンのロード / アンロード、キー単位の参照カウント、実行時データに対しては例外を投げない設計)、Deferred Event Queue(IDeferredBus — イベントをいまキャプチャして、あとから任意の Flush() のタイミングで publish)、Command Registry(ICommandRegistry — 登録 / トークナイズ / 実行、履歴、プレフィックス補完を備えたランタイムコマンドの中核。ゲーム内コンソールの UI 自体はご自身で作る前提です)。サンプルはインポート可能な 7 種に増え、うち 4 種は開いてそのまま実行できる完成済みシーンです: Motion Lab(イージング 8 種を並べた tween ギャラリー、ウェイポイントのシーケンス、そして Clock 分離の見せ場 — ゲームプレイの TimeScale を 0 にするとギャラリーは止まり、UI のスピナーだけが動き続けます)、Save/Load + Seeded Random(ロード後に引くシード付き乱数 3 回分が、セーブ時に予告した値と完全に一致します)、M25 Command Console(履歴と補完が実際に動くゲーム内デベロッパーコンソール)、さらに RPG Starter のコードテンプレート。Tools ▸ Common Game System 以下には新しいエディタツールを追加しました: Welcome / Quick Start ウィンドウ(環境チェック、サンプルのワンクリックインポート)と、ランタイム用の Service Debugger(サービスレジストリのライブ表示、Clock 別のタイムスケール、動作中の tween / FSM / audio / command の統計)。修正: 保存済みのオーディオ設定が起動時に適用されるようになりました(ミキサー初期化の競合)。UI サンプルの音量 / ミュート操作が即座に効くようになり、その効果を耳で確かめられるよう「カノン」(ニ長調)の BGM ループを同梱しました(楽曲はパブリックドメイン、音源は自社制作の合成演奏)。ほかに、パネルナビゲーションの NullReferenceException、「No cameras rendering」のウォーターマーク、Play 終了時の後始末で出ていた例外も修正しています。サードパーティ依存は引き続き 0 個。IL2CPP 対応、レンダーパイプライン非依存、自動 EditMode テスト 2,550 件。

v1.14.02026-06-14

レビューに提出しましたが、公開はされていません。このビルドは 2026-06-15 に Unity Asset Store へ送ったものの、レビューが行われることはなく、誰の手にも届きませんでした。インストールできたバージョンとしてではなく、開発の記録としてここに残しています。Bootstrap.Run() 1 回で立ち上がる、プロダクション品質のサービス 20 個 — Service Locator、Logger、Event Bus、Save/Load、Configuration、Input、Time、Object Pool、Audio、UI Panel Stack、Scene Flow(+ Additive)、Localization、Achievements/Stats、Scheduler、Tween、Asset Provider、Random、FSM、Pushdown Stack、Tween Sequencing。サードパーティ依存 0 個、IL2CPP 対応、レンダーパイプライン非依存、AI 対応(AGENT.md + 5 つのタスクスキル)。1.14.0 より前のバージョンは、いずれも社内の開発マイルストーンです。

バージョンごとの詳細な開発用変更履歴は、パッケージ内に同梱しています(CHANGELOG.md)。

法的事項

ライセンス

Common Game System はプロプライエタリ(proprietary)なソフトウェアで、Unity Asset Store でのみ配布されます。ご利用は Unity Asset Store EULA に準拠します。

  • Unity がサポートするプラットフォーム向けにリリースする、商用・非商用いずれのゲームでも使用できます。
  • フレームワークの公開 API を呼び出す、利用者側のコードは自由に改変できます。
  • フレームワーク本体(および実質的な派生物)を、いかなるアセットマーケットプレイスにも再公開すること。
  • 著作権表示 / ライセンス表示を削除すること、およびソースをサブライセンスすること。

サードパーティのランタイム依存は 0 個です。同梱される Unity パッケージには Unity Companion License が適用されます(THIRD-PARTY-NOTICES.md を参照)。Copyright © 2026 JoGyoungJun. All Rights Reserved.

サポート

お問い合わせ

ご質問・サポートのご依頼はこちらへ:yoop80075@gmail.com· または、パッケージページの Asset Store パブリッシャー Q&A タブからどうぞ。