アセットに名前を付けて取得できるようにし、読み込みとそのタイミング、寿命を一元管理する仕組み。
ゲームでは、画像、音声、フォント、シェーダー、アニメーション定義などの外部データを多く扱う。
これらを使う場所ごとに直接ファイルから読み込むと、同じデータを何度も読み込んだり、読み込み処理が各所に分散したり、データの寿命管理が難しくなったりする。
そのため、アセットのデータを管理用の仕組みに保持させ、ゲーム中のオブジェクトや処理からはファイルパスではなく名前を通じて取得して利用する設計が好まれる。
アセット管理を適切に実装すると、次のような利点がある:
- ファイルパスをゲーム中の各所に直接書かなくてよくなる
- 同じアセットを重複して読み込まなくてよくなる
- ロードのタイミングを制御しやすくなる
- ロード画面などで事前に読み込む設計にしやすくなる
- 不要になったアセットを解放しやすくなる
- アセットの寿命をゲーム全体の仕組みとして管理しやすくなる
実装のパターン
- アセットを名前付きで登録する
- アセットに名前を付け、対応するファイルパスや読み込み設定を管理側へ知らせる
- 必要なタイミングでロードする
- 登録情報をもとに、実際の画像・音声・フォントなどのデータをメモリ上に構築する
- 名前を指定して使用する
- 登録された名前を指定して、ロード済みのアセットを取得する
- 不要になったらメモリ上のデータを解放する
- 登録情報は残したまま、メモリ上の実データを解放する
- 必要に応じて登録自体を解除する
- 名前やファイルパスなどの登録情報そのものを管理対象から外す
例えば、Player という名前でプレイヤー画像を登録しておけば、ゲーム中では Player という名前を指定してその画像を取得できる。
このとき、画像を使うたびにファイルから読み直すのではなく、最初にロードした一つのデータを使い回す。
アセット管理の実装では、名前からアセットを取り出せるように、文字列と実データを対応付ける構造を使うことが多い。
例えば、テクスチャ名からテクスチャデータ、サウンド名からサウンドデータ、フォント名からフォントデータを取得できるようにする。