Logger
01ILoggerビルド構成ごとのログレベルとカテゴリフィルタを備えた分類ロギング。スレッドセーフです。
Unity 6.3 LTS の PC シングルプレイヤー向けプロジェクトのための、ヘッドレスな C# 基盤フレームワークです。ヘッドレスとは、シーンではなくコードだということ — インポートしても Hierarchy は変わりません。セーブ/ロード、入力、シーン遷移、オーディオ、UI パネル、Tween、状態機械など 23 個のサービスが、自動の Bootstrap.Run() 1 つですべて立ち上がります。DI コンテナも、シーンに置くシングルトンも、ゲームスクリプト側の初期化コードも要りません。
ここから
CGS はシーンではなくコードです。インポートしてもシーンの Hierarchy には何も現れません — フレームワークは見えないところで働きます。目に見えるのは Welcome ウィンドウとデモシーンです。最短のツアーはこちら:
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)、シングルプレイヤー
クイックスタート
フレームワークは自分で起動するので、呼ぶべき初期化コードはありません。下のスクリプトは貼り付けたままコンパイルできます — 最初のシーンの任意の 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 個のサービスはすべて登録済みです。
良い習慣
リファレンス
ILoggerビルド構成ごとのログレベルとカテゴリフィルタを備えた分類ロギング。スレッドセーフです。
IObjectPoolServiceIPoolable ライフサイクルによるプレハブのプーリング — カテゴリ別プール、プリウォーム、自動返却。
ITimeServiceClock 単位の時間・一時停止・スローモーション — Gameplay / UI / Background の各 Clock が独立して進みます。
IEventBus型安全な publish / subscribe。疎結合なゲーム全体のメッセージングを実現します。
ISaveServiceJSON のスロットセーブ、安全なアトミック書き込み、バージョン付きマイグレーションフック。
IConfiguration型付きの設定グループ(オーディオ / グラフィック / 入力)。設定した瞬間に永続化されます。
IInputKeyMapSourceInput Actions アセットを保持し、プレイヤーのキーのリバインドをセッションをまたいで保存します。
IInputServiceInput System のラッパー — アクションマップのコンテキストとキーのリバインド。
IAudioServiceAudioMixer 上の BGM / SFX / ボイスチャンネル — プール化したソース、フェード、音量バインド。
IPanelStackパネルの push / pop、モーダル、ゲームパッド + キーボードのフォーカス制御。
ISceneServiceローディング画面とキャンセルに対応した非同期シーンロード。Additive なロード / アンロードにも対応。
ILocalizationServiceキー→文字列の参照とランタイムの言語切り替え — バインド済みテキストは再起動なしで即時更新。
IAchievementServiceローカルの統計と実績。しきい値による自動アンロック、セーブサービス経由で永続化。
ISchedulerポーズ / スローモーションに追随する After / Every / NextFrame タイマー + メインスレッドへのディスパッチ。
ITweenServiceポーズ対応の値トゥイーン — イージングカーブ 31 種、型を閉じた To / From オーバーロード。
IAssetProviderAddressables ベースの非同期ロード — 参照カウントとスコープ単位の自動アンロード。
IRandomService決定論的なシード付き RNG — 名前付き / フォーク可能なストリームと、セーブと整合するスナップショット / リストア。
IStateMachineServiceゲーム側が定義するコンテキスト型に対する、フラットな有限状態機械のファクトリ。ガード付き遷移対応。
IPushdownStackService再開可能なゲーム状態スコープのスタック — ゲームプレイに重ねる会話、メニューの戻りスタック。
ITweenSequenceServiceTween サービスの上に築く、順次 + 並列のタイムライン。流れるようなビルダーで組み立てます。
IAddressableSceneServiceAddressables カタログからの Additive シーンのロード / アンロード — キー単位の参照カウント。
IDeferredBusイベントをいまキューに入れ、任意の Flush() で publish — 例えば物理コールバックの外へ。
ICommandRegistryランタイムコマンドのレジストリ — 登録 / トークナイズ / 実行、履歴、補完。コンソール UI はご自身で。
各サービスには、平易な言葉で書かれたリファレンスページ(Documentation/Modules/)と、1 行で差し替えられる Null(何もしない)実装がパッケージ内に同梱されています。
仕組み
リリース
入門者のためのリリースです — 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 個です。
ランタイムアセンブリを 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 件です。
初回の公開リリースです。未公開に終わった 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 件。
レビューに提出しましたが、公開はされていません。このビルドは 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 に準拠します。
サードパーティのランタイム依存は 0 個です。同梱される Unity パッケージには Unity Companion License が適用されます(THIRD-PARTY-NOTICES.md を参照)。Copyright © 2026 JoGyoungJun. All Rights Reserved.
サポート