7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Addressable Asset System を試してみました。

Posted at

#Addressable Asset System Packageを導入する

以前AssetBundleを使用してた時はビルドとか色々大変だった気がします。。。
Addressable Asset SystemはこのAssetBundle周りを簡単にしてくれるみたいです。

環境
今回使用したバージョンはUnity2019.2.0f1 で Address Asset Systemのバージョンは1.1.5になります。

セットアップ
Package ManagerでAddressablesを選択し、インストールします。
スクリーンショット 2019-07-29 12.31.40(3).png

セットアップが完了すると,メニューにWindows>Asset Managementが作られます。
スクリーンショット 2019-08-02 16.39.50.png

Windows>Asset Management>Addressablesを選択して,Create Addressables Settingsを選択
環境を作成します。
スクリーンショット 2019-07-29 12.31.40(2).png

デフォルトの環境が作成されます。
スクリーンショット 2019-08-02 17.04.58.png

##ローカルでAssetを読みむ
まず、試しにローカルでの読み込みを行います。
新しいシーンを作成し、sphereをシーンに追加し、それをフォルダにドラッグしてprefabにします。
そしてAddressablesパネルのDefault Local Groupにドラッグします。
デフォルトだとpathがAsset Addressの名前になるので Simplify Entry Namesで簡単な名前にします。

スクリーンショット 2019-07-29 13.39.47.png

下記のスクリプトを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 /ビルド必要で、実際に指定したサーバーからロードする

スクリーンショット 2019-07-29 14.42.53.png

ローカルなのでFast Modeを選択し、Playすると設定したPrefabが読み込まれ、Instantiateされます。

##サーバーからAssetを読み込む

まず、シーンにCubeを追加してこれをPrefabにします。(サーバー読み込み用)
次にDefault Local Groupの他にグループを作成します。
スクリーンショット 2019-08-03 00.53.18.png

作成したCube Prefabを新しく作成したPacked Asset Groupにドラッグします。
スクリーンショット 2019-08-03 01.00.00.png

サーバー設定を行います。
現在使用してるDefault Profile の設置を変更します。
スクリーンショット 2019-08-03 01.25.55.png

Build Remote Catalogのチェックを入れます。これを入れないと更新できませんでした。
次に"RemoteBuildPath"でローカルでの書き出し先を指定します。
デフォルトのままにしました。
"RemoteLocalPath"は読み込むサーバー先のURLを書きます。
例えば "https://test.com/" の場合は "https://test.com/[BuildTarget]"
[BuildTarget]はProjectのBuild設定になります。例えば、MacのStandaloneだとStandaloneOSXとかになります。
ここのURL間違えてもエラーなどは出ませんでしたので間違えがないように気をつけた方がいいです。

スクリーンショット 2019-08-03 01.29.08.png

次に先ほど作成したPacked Asset Groupの設定を行います。
スクリーンショット 2019-08-03 01.39.11.png

こちらはBuild PathをRemoteBuildPath
LoadPathをRemoteLoadPathに変更します。
スクリーンショット 2019-08-03 01.40.56.png

あとはAssetをBuildします。
スクリーンショット 2019-08-03 01.58.09.png

ビルドした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
を選択します。
ここで変更がチェックされるはずですが、うまくチェックできてませんでした。
スクリーンショット 2019-08-03 02.26.22.png

変更がチェックされてないのですが、そのまま書き出します。
スクリーンショット 2019-08-03 02.43.04.png

先ほどと同じlocalPathに書き出されるので、そのデータを再度サーバーにアップロードします。
そして、ビルドしたもので再度見るとAssetが更新されてるのが確認できます。

##参考サイト

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?