1. 手に入るもの

Common Game System とは何か、プロジェクトに提供される 23 のサービス、そして意図的に含めていないもの。

1.1 Common Game System とは?

Common Game System(CGS)は Unity 6.3 LTS 向けの C# 基盤フレームワークです。セーブ、オーディオ、入力、シーンロード、タイマー、トゥイーンなど、あらゆるゲームが必要とする配管部分を、すぐに使える 23 のサービスとしてプロジェクトに提供します。

23 のサービスはすべて、Play を押すと自動的に起動します。1 つのブートストラップコンポーネントが、あなたの最初のスクリプトが走る前にすべてを登録します。シーンにドラッグするものも、設定するものもありません。あなたのコードは、ただサービスを要求して使うだけです:

[SerializeField] private AudioClip clickClip;

private void OnButtonClicked()
{
    var audio = ServiceLocator.Resolve<IAudioService>();
    audio.PlaySfx(clickClip);
}

CGS はコードのみで構成されています。画面には何も描画せず、アートスタイルも、ジャンルも、プロジェクト構成も押しつけません。ゲームはこれまでどおり自分のやり方で書き続けてください。CGS はその下で動く機構を引き受けます。

1.2 解決する問題

大半の Unity プロジェクトは同じように始まります: 「Managers」フォルダです。前のプロジェクトからコピーした SaveManager。記憶を頼りに書き直した AudioManager。タイムスケール用のシングルトン、フェード用のヘルパー、作りかけのオブジェクトプール。どれもプロジェクトごとに書き直され、テストされることはまれで、毎回違うやり方で配線されます。

CGS は、そのフォルダの完成形です。すべてのサービスは:

  • 一貫している。 どのサービスにも同じ方法で、1 つのロケーター経由でアクセスします。パターンを一度覚えれば、23 すべての使い方が分かります。
  • テスト済み。 フレームワークには 2,600 以上の自動テストが同梱されています。自分でインポートして実行することもできます(第 3 章を参照)。
  • ドキュメント化されている。 すべてのサービスに、パッケージ内 Documentation/Modules/ 配下の専用リファレンスページがあります — 同じリファレンスが、このサイトのサービスリファレンスとしてオンラインでも読めます。
  • 差し替え可能。 すべてのサービスはインターフェイスの背後にあります。1 行で独自実装に差し替えることも、サービスを完全にオフにすることもできます(下記 1.4 節を参照)。

1.3 23 のサービス一覧

各サービスは 1 つのインターフェイスです。以下の表は、ゲームにとっての役割ごとにグループ化しています。各サービス名から完全なリファレンスページへリンクしています。

セーブと設定

サービスゲームのために何をしてくれるか
ISaveService名前つきスロットを持つ JSON セーブファイル。書き込みはアトミックなので、クラッシュしても既存のセーブが壊れることはありません。
IConfigurationセッションをまたいで永続化される、型付きの設定グループ(オーディオ音量、グラフィックスオプションなど)。
IAchievementServiceローカルのプレイヤー統計と実績。統計値がしきい値を超えると、実績は自動的に解除されます。

入力と UI

サービスゲームのために何をしてくれるか
IInputService名前つきアクションマップ("Gameplay"、"Menu")を通じてゲームパッドとキーボードの入力を読み取り、対話的なキーリバインドにも対応します。
IInputKeyMapSource入力アクションアセットを供給し、プレイヤーのリバインド変更を保存します。
IPanelStackUI パネル(メニュー、ダイアログ)のプッシュとポップを行い、ゲームパッドとキーボードのフォーカスを常に正しいパネルに保ちます。
ILocalizationServiceキーで表示テキストを引き、実行時に言語を切り替えます — 再起動は不要です。

オーディオ、シーン、アセット

サービスゲームのために何をしてくれるか
IAudioServiceAudioMixer を通じて音楽、効果音、ボイスを再生し、チャンネルごとの音量制御を提供します。
ISceneServiceローディング画面、キャンセル、加算ロード/アンロードつきで、シーンを非同期に読み込みます。
IAddressableSceneServiceビルドリストではなく Addressables コンテンツにある加算シーンを読み込みます。
IAssetProviderAddressables アセットを読み込んで参照カウントを管理し、誰も使っていなくなったときだけアセットを解放します。

時間とモーション

サービスゲームのために何をしてくれるか
ITimeServiceゲームプレイ、UI、バックグラウンド処理のそれぞれに独立したクロック。メニューをアニメーションさせたまま、ゲームプレイだけをポーズやスロー再生できます。
ISchedulerタイマー: 遅延後、一定間隔ごと、または次のフレームに処理を実行します。メインスレッドでの処理実行にも使えます。
ITweenService31 種類のイージングカーブで任意の値を時間経過とともにアニメーションさせます。トゥイーンはゲームのポーズと連動して停止します。
ITweenSequenceServiceトゥイーンを連結して、順次または並列のタイムラインにします。複数ステップからなるイントロアニメーションなどに使えます。

ロジックとユーティリティ

サービスゲームのために何をしてくれるか
ILogger散らばった Debug.Log 呼び出しを置き換える、カテゴリ分けされたフィルタリング可能なロギング。
IEventBus型安全なパブリッシュ/サブスクライブ。システム同士は直接参照ではなくイベントで対話します。
IDeferredBusイベントをいまキューに入れ、あなたが指示したタイミングで後から配信します — ローディング中やカットシーン中に便利です。
IObjectPoolServiceプレハブのインスタンス(弾丸、パーティクル)を毎回生成・破棄するのではなく再利用します。
IRandomService名前つきストリームを持つシード付き乱数。結果は再現可能で、セーブとロードをまたいでも維持されます。
IStateMachineServiceAI やゲームフロー用のシンプルなステートマシンを、enter・exit・遷移ルールつきで構築します。
IPushdownStackService入れ子になったゲームステートを管理します — 例えば、ゲームプレイの上に重ねたポーズ画面を、きれいに取り除くといった処理です。
ICommandRegistry開発者コンソールやチート用のランタイムコマンドレジストリ。コンソール UI は自分で用意します。動作するサンプルつきです。

1.4 すべてのサービスにオフスイッチがある

各サービスには「null」の双子が同梱されています: あらゆる呼び出しを受け入れて何もしないバージョンです。プロジェクトにすでにオーディオソリューションがあるなら、CGS のものを 1 行でオフにできます:

ServiceLocator.Replace<IAudioService>(new NullAudio());

フレームワークの残りの部分はそのまま動き続けます。オーディオサービスと対話するコードはすべてコンパイルも実行もされたまま — ただ無音になるだけです。同じ 1 行のスイッチが 23 すべてのサービスに用意されており、同じ仕組みで null 版の代わりに独自実装を差し込むこともできます(第 7 章に全一覧があります)。

1.5 CGS ではないもの

境界を先に知っておくと時間の節約になります:

  • ゲームプレイコンテンツはありません。 キャラクター、インベントリ、ダメージ計算式、レベルは含まれません。CGS が提供するのは仕組みで、コンテンツはあなたのゲームが提供します。(各部品の組み合わせ方は、小さな RPG 風サンプルが示しています。)
  • レンダリングはありません。 CGS にはシェーダー、マテリアル、パイプラインコードは含まれません。URP、HDRP、ビルトインパイプラインのいずれでもまったく同じに動作します。
  • シングルプレイヤー、PC 中心です。 CGS は Windows、macOS、Linux 上のシングルプレイヤーゲームを対象としています。ネットワーキング層はなく、モバイルやコンソール向けのプラットフォーム対応もありません。

1.6 動作要件

  • Unity 6.3 LTS。 CGS は Unity 6.3 LTS 上でビルドおよびテストされています。
  • よく使われる 3 つの Unity パッケージ、いずれも任意。 Input System パッケージ(入力サービスが使用)、uGUI(UI パネルスタックとデモシーンが使用)、Addressables(アセットサービスと Addressable シーンサービスが使用)です。Input System と uGUI は新規 Unity プロジェクトに最初から入っており、このパッケージをインポートすると足りないもの — Addressables を含む — が依存関係リストを通じて自動的にインストールされるため、ほとんどのユーザーは手動で何かをインストールする必要はありません。

CGS は 7 つのアセンブリに分割されています。コアアセンブリは 18 のサービスを持ち、Unity 本体以外には何にも依存しません。残りのアセンブリは、それぞれ 1 つの任意パッケージをラップします。パッケージを削除すると — 例えば Addressables を — 対応する CGS アセンブリは静かにコンパイル対象から外れます。フレームワークの残りは変わらずコンパイル・動作し、uGUI がなくなった場合は UI パネルスタックが安全な何もしないサービスに退避します。任意パッケージの欠落が原因でエラーの壁に遭遇することは決してありません。完全なアセンブリマップは第 7.1 章にあります。


次へ: 2. インストールと最初の 5 分間