これはゲーム開発エンジン Unity に関する記事です。
この記事は、
https://docs.unity3d.com/Packages/com.unity.addressables@1.1/manual/AddressableAssetsOverview.html
に書かれている内容を日本語に翻訳したものです。
分かりにくいところには(全体を通して分かりにくいですがw)、補足説明を付けています。
アドレッサブル・アセット・システム(以下、AAS)は2つのパッケージを含む。
- アドレッサブル・アセット・パッケージ(基本パッケージ)
- スクリプタブル・ビルド・パイプライン・パッケージ(依存パッケージ)
アドレッサブル・アセット・パッケージをインストールすると、同時にスクリプタブル・ビルド・パイプライン・パッケージがインストールされる。
以下の概念は、AASに関する全てのドキュメントで使われる。
- アドレス
実行時の検索を容易にするアセットのロケーション識別子。補足AASはこのアドレス(住所)を頼りに、データがある場所(パソコンのHDDやSSDの中にあるかも知れないし、どこかのサーバーにあるかも知れない)を突き止め、その場所からデータをロードします。 - AddressableAssetDataフォルダ
プロジェクトの Assets フォルダ内にあり、アドレッサブル・アセットのメタデータを保持する。 - アセット・グループ
ビルド時に使用できるようになるアドレッサブル・アセットをグループ化したもの。補足グループ化を使う例として考えられるのは、ゲームのアップデートで追加するデータです。4月1日に大型アップデートを実施!(エイプリルフールですが本当です)
みたいなアップデートで必要になるデータをグループ化して、そのグループに「エイプリルフールアップデート」というような名前を付けます。このアセット・グループをサーバーにアップロードし、ゲームのプログラムを更新すれば、エイプリルフールアップデートで追加されたアイテムや敵キャラクターのデータなんかを、サーバーにアップロードした「エイプリルフールアップデート」からダウンロードできるようになります。
- アセット・グループ・スキーマ
アセット・グループに割り当てることができ、ビルドするときに使うデータを定義する。
補足要するに、どのアセットがどのアセット・グループに所属しているか?をまとめたもので、グループ単位でビルドできる。 - AssetReference(アセット・リファレンス)
直接参照のような動作を行うが、初期化を遅延させるオブジェクト。このオブジェクトはいつでもロードできるGUIDを持ったアドレッサブルとして保持される。補足初期化を遅延させる…というのは、アドレッサブル・アセットをゲームオブジェクトのコンポーネントに指定したら、使う前に Instantiate() してねっ!ということです(多分)。GUID とは、絶対に重複しない世界で(宇宙で?)ただひとつのIDのことです。
アセット・リファレンスが重複することはないので、アセット・リファレンス同士を比較して、これは同じアセットか?を調べることができそうです。
GUID を使ってるので、どのゲームで使われているアセットなのか?…も調べられそうですが…。「アドレッサブル」とは、AASを使ってロードできるようにマーキングしたアセットのことです(アドレッサブル・アセットのこと)。
インスペクターでアドレッサブルと書かれたチェックボックスにチェックを入れるだけで「アドレッサブル・アセット」になります。
アドレッサブル・アセットはAASでロードできるだけでなく、通常どおり直接参照(ゲームオブジェクトのコンポーネントに指定)することもできます。直接参照しているアドレッサブル・アセットが、どこに配置され、どのように読み込まれるのかは、この時点では謎です。 - 非同期ローディング
ゲームプログラムを変更することなく、開発がどのような状態にあっても、アセットとそのアセットと依存関係にあるアセットの設置場所を変更できる。非同期ローディングはAASの基礎を成すもの。補足非同期ローディングとは、ゲームの処理を止めずにデータの読み込みを行うことです。
非同期ではないローディングは、データの読み込みが終わるまでゲームが止まります(見た目はフリーズしたような状態になる)。
Android、iOS、PS4(xboxとNintendo switchは触ったことがないので不明)のレギュレーションによれば、データの読み込み中は、アニメーションする絵などを表示し、ゲームがフリーズしていないことをユーザーに示さなければならないのですが、非同期ではないローディングを行うと、このアニメーションも止まってしまい、レギュレーション違反になります。
スマホやコンシューマー向けのアプリをリリースするのであれば、AASに限らず、全てのローディングは非同期で行う必要があります。
このレギュレーションは審査が緩く、2~3秒ピタっとアニメーションが停止するゲームでも審査を通過してリリースされているのが現状ですが、ローディング時のアニメーションすらないものは確実に審査ではじかれます。要するに、最近のゲームでは当たり前に使われているものなので、逆にAASが非同期ローディングに対応してない場合は、自分で非同期ローディングの処理を作らないといけなくなるのでめんどくさいです。
そこにしっかり対応してくれたのは、それはもう、ありがたいことです。
ありがたや~(人) - ビルドスクリプト
アセット・グループをビルドしてパッケージ化し、リソース・マネージャーが使うアドレスとリソースの設置場所を関連付けたデータを提供する。補足アセット・グループに限らず、AASで使うアドレッサブル・アセットはビルドしないと使えません。ビルドすることによって、全てのアドレッサブル・アセットが1つ、もしくは、いくつかのファイルの中に詰め込まれます。これをパッケージ化と言います。リソース・マネージャーは、非同期ローディングの処理を行うときにアクセスすることができます。AASが持つ機能のひとつで、AASが扱う全てのアセットを管理するプログラムです。
- ラベル
同じラベルを付けた複数のアドレッサブル・アセットは、ゲーム実行時にまとめてロードできる。
例 Addressables.DownloadDependenciesAsync(“spaceHazards”);
補足説明の方が文章量多いw
めちゃ助かります。
ぜんぜん記事ないし新しい言葉誰も説明してくれなくて。。。
捕捉が多ければ多いほど嬉しいです。