#Addressable Asset System Packageを導入する
以前AssetBundleを使用してた時はビルドとか色々大変だった気がします。。。
Addressable Asset SystemはこのAssetBundle周りを簡単にしてくれるみたいです。
環境
今回使用したバージョンはUnity2019.2.0f1 で Address Asset Systemのバージョンは1.1.5になります。
セットアップ
Package ManagerでAddressablesを選択し、インストールします。
セットアップが完了すると,メニューにWindows>Asset Managementが作られます。
Windows>Asset Management>Addressablesを選択して,Create Addressables Settingsを選択
環境を作成します。
##ローカルでAssetを読みむ
まず、試しにローカルでの読み込みを行います。
新しいシーンを作成し、sphereをシーンに追加し、それをフォルダにドラッグしてprefabにします。
そしてAddressablesパネルのDefault Local Groupにドラッグします。
デフォルトだとpathがAsset Addressの名前になるので Simplify Entry Namesで簡単な名前にします。
下記のスクリプトをGameObjectをAttachしてください。
AttachしたあとInspectorで読み込みしたいAssetRerenceに設定してください。
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using System.Collections;
public class SampleAddress: MonoBehaviour
{
public AssetReference Ref;
GameObject Obj = null;
AsyncOperationHandle<GameObject> loader;
private void Start()
{
Addressables.LoadAsset<GameObject>(Ref).Completed+=OnLoadDone;
}
void OnLoadDone(AsyncOperationHandle<GameObject> handle)
{
loader = handle;
if (handle.Status == AsyncOperationStatus.Succeeded)
{
Obj = handle.Result;
Obj = Instantiate(Obj, transform.position, Quaternion.identity);
}
}
}
次にPlay Mode Scriptを設定します。
これはUnityでPlayする時のAddressableのモードを設定することが可能で
- Fast Mode / ビルド必要なし、ローカルAssetを直接読み込む
- Virtual Mode / ビルド必要なし、バーチャルHostを立てて、読み込みをシュミレートする
- Packed Play Mode /ビルド必要で、実際に指定したサーバーからロードする
ローカルなのでFast Modeを選択し、Playすると設定したPrefabが読み込まれ、Instantiateされます。
##サーバーからAssetを読み込む
まず、シーンにCubeを追加してこれをPrefabにします。(サーバー読み込み用)
次にDefault Local Groupの他にグループを作成します。
作成したCube Prefabを新しく作成したPacked Asset Groupにドラッグします。
サーバー設定を行います。
現在使用してるDefault Profile の設置を変更します。
Build Remote Catalogのチェックを入れます。これを入れないと更新できませんでした。
次に"RemoteBuildPath"でローカルでの書き出し先を指定します。
デフォルトのままにしました。
"RemoteLocalPath"は読み込むサーバー先のURLを書きます。
例えば "https://test.com/" の場合は "https://test.com/[BuildTarget]"
[BuildTarget]はProjectのBuild設定になります。例えば、MacのStandaloneだとStandaloneOSXとかになります。
ここのURL間違えてもエラーなどは出ませんでしたので間違えがないように気をつけた方がいいです。
次に先ほど作成したPacked Asset Groupの設定を行います。
こちらはBuild PathをRemoteBuildPath
LoadPathをRemoteLoadPathに変更します。
ビルドしたAssetは"RemoteBuildPath"に配置されます。
今回の場合はUnity Projectの"ServerData/StandaloneOSX"に書き出されます。
そしてこれをサーバーにアップロードし、先ほどのAttachしたScriptのInspectorでサーバーにアップした
Asset名をして,Playすると読み込まれます。
AsyncOperationHandleのPercentCompleteを使用するとProgress Barっぽいのができるみたいですが、
参考
https://docs.unity3d.com/Packages/com.unity.addressables@0.7/manual/AddressableAssetsGettingStarted.html
0と1しか戻ってこなく、フォーラムを見るとまだ調整中っぽいでした。
https://forum.unity.com/threads/asyncoperationhandle-percentcomplete-not-updating-when-given-as-a-parameter-in-function.668317/#post-4761905
##Assetを更新する方法
Assetが更新した場合の書き出し手順になります。
まず、更新をチェックするために先にProjectのビルドを行います。
StandaloneなどでAssetのロードが正常に動いてるのを確認してから
Prefabを色などを変更してみます。
次に"Prepare for Update Content"で更新したコンテンツをチェックします。
選択するとプロンプトが出るので
/Assets/Addressable/[OS]/addressables_content_state.bin
を選択します。
ここで変更がチェックされるはずですが、うまくチェックできてませんでした。
先ほどと同じlocalPathに書き出されるので、そのデータを再度サーバーにアップロードします。
そして、ビルドしたもので再度見るとAssetが更新されてるのが確認できます。
##参考サイト