アセット バンドル
Warning
このセクションの内容はもう古いので、参考程度に使ってください。
アセットのバンドルとは、特定のタイミングでゲームにダウンロードすることができる単一のアーカイブにアセットをパッケージ化したものです。
これにより、ダウンロードコンテンツ(DLC) を作ることができます。
基本ルール:
- プロジェクトは複数のバンドルを生成することができます。
- 複数のアセットセレクターからバンドルを作成できます(現在は
PathSelector
とTagSelector
だけがサポートされています)。 - バンドルは、他のバンドルに依存することができます。
- すべてのバンドルは
default
バンドルを暗黙的に参照します。このバンドルには、個別のバンドルに入れるべきではないアセットがすべてパッケージ化されています。 - バンドルがゲーム内にデプロイされると、そのバンドルのすべてのアセットとすべての依存関係がアクセス可能になります。
- バンドルの解決はバンドルのダウンロードを行う非同期コールバックを介して行われます。コールバックは、依存関係ごとに一度だけ呼び出されます(AssemblyResolveイベントに似ています)。
バンドルを作成する
Note
現在のところ、作成にはいくつかの手作業が必要です(言い換えれば、sdpkg
を手で編集する必要があります)。
ゲーム実行ファイルの sdprj
ファイルを開き、以下の設定を追加します。
例:
MyBundleName
という名前のバンドルは、MyTag1
とMyTag2
というタグを持つアセットを持っています。MyBundleName2
という名前のバンドルは、MyTag3
とMyTag4
というタグを持つアセットを持っています。このバンドルは、MyBundleName
に依存しています。
Bundles:
- Name: MyBundleName
Selectors:
- !TagSelector
Tags:
- MyTag1
- MyTag2
- Name: MyBundleName2
Dependencies:
- MyBundleName
Selectors:
- !TagSelector
Tags:
- MyTag3
- MyTag4
- !PathSelector
Paths:
- folder1/
- /folder2/
- *.bin
- folder3/*.xml
Note
アセットの依存関係は、最も適切なバンドルの中に自動的に配置されます。
現在のプロセスは以下のように機能します。
- 特定のタグセレクタ(バンドルアセットの "roots")に一致するアセットを検索します。
- それらの "roots" バンドルアセットに依存しているアセットを列挙して、"roots" アセットと同じバンドルに入れます。
- パッケージの依存関係のいずれかから既にアクセス可能である場合を除きます(例:共有依存パッケージやデフォルトパッケージ)。
- 他のすべてのものを
default
バンドルに配置します。
注意:
- 共有アセットは、特に共通パッケージやデフォルトパッケージに配置されていない場合に複製されることがありますが、それは意図された動作です(例えば、共通アセットを使用するユーザーが、自己完結する必要がある2つの別個の DLC を配布したい場合など)。
- すべてのバンドルは、暗黙のうちに
default
バンドルに依存しています。
実行時にバンドルを読み込む
バンドルの読み込みは、ObjectDatabase.LoadBundle(string bundleName) (ref:{Stride.Core.Storage.ObjectDatabase.LoadBundle})
で行います。
// バンドルを読み込む
Assets.DatabaseFileProvider.ObjectDatabase.LoadBundle("MyBundleName2");
// 特定のアセットを読み込む
var texture = Assets.Load<Texture2D>("AssetContainedInMyBundleName2");
セレクター
セレクターは、バンドルに格納されているアセットを選択することに役立ちます。
タグセレクター
アセットにアタッチされているタグのリストをもとに、アセットを選択します。
プロパティ:
- Tags: タグのリスト。1つ以上のタグを含むアセットが選択されます。
パスセレクター
パスをもとに、アセットを選択します。
標準的な .gitignore パターンがサポートされています(ただし、!(否定)、#(コメント)、[0-9](グループ)は除きます)。
プロパティ:
- Paths: フィルターのリスト。1つ以上のフィルタに適合するURLを持つアセットが選択されます。