Help us understand the problem. What is going on with this article?

【Unity】Addressable Assets Systemを使ってサーバに配置したAsset Bundleを読み込む方法

More than 1 year has passed since last update.

はじめに

サーバに配置したAsset BundleをAddressableに読み込む方法についてです。
Addressable Assets System(AAS)はUnity2018.2以降でpreview機能として提供されており、現時点での最新バージョンは1.1.4 previewです。

あくまで導入と実装が目的なので、ここではAddressableの詳しい仕様については書きません。
気になる方や内部構造を深く知りたい方はこちらの方々の記事をご覧ください。

実行環境

Windows10 64bit, Unity2018.3.3f1, Addressable Assets System 1.1.4-preview, VirtualBox CentOS7, PuTTY

おおまかな流れ

  1. Unityでビルドして.bundleファイルを作成
  2. サーバに配置
  3. Unityからサーバ上のAssetBundleにリモートアクセス、読み込む

Unity側の操作

Addressable Assets Systemの導入

① UnityEditorメニューのWindow->Package Managerを開く
1.png
② Advanced->Show Preview Packageを押してメニューを開く
2.png
③ Addressableという項目を開き、バージョン最新(1.1.4)でInstallボタンを押す
3.PNG
④ インストールが完了したら、Window->Asset Management->Addressablesが追加されるので開く
4.PNG
⑤ Create Addressables Settingを押す
5.PNG
⑥ Default Local Groupを右クリックする
6.PNG
⑦ Simplify Entry Nameをクリックしてパスを省略形にする(お好みで)
7.png

スクリプトの作成

① 適当にPrefabを作る
② 適当にスクリプトを作成し、オブジェクトにアタッチする
(こちらではAddressableInstantiateというスクリプトを生成しました)
③ 先ほど作ったPrefabをInspectorの「None(AddressableAsset)」にアタッチする
8.png
② 先ほどのスクリプトに以下のコードを書く

PrefabをLoadして生成するスクリプト
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

public class AddressableInstantiate : MonoBehaviour
{
    public AssetReference m_Ref;
    GameObject m_Result = null;

    private void Start() {
        Addressables.LoadAssetAsync<GameObject>(m_Ref).Completed += OnLoadDone;
    }

    void OnLoadDone(AsyncOperationHandle<GameObject> handle) {
        if (handle.Status == AsyncOperationStatus.Succeeded) {
            m_Result = handle.Result;
            m_Result = Instantiate(m_Result, Vector3.zero, Quaternion.identity);
        }
    }
}

AddressableAssetsSystemの設定

① Assets/AddressableAssetsData/AssetGroups/Default Loacal Groupを開く
9.png
② 「Build Path」と「Load Path」のプルダウンメニューから、それぞれ「RemoteBuildPath」「RemoteLoadPath」に変更
10.PNG
③ Assets/AddressableAssetsData/AssetGroups/Built In Dataを開く
13.png
④ 「Include Resources Folders」と「Include Build Setting Scenes」のチェックを外す
14.png
※こちらの環境では④の手順を行わないでビルドすると以下のようなエラーが発生しました
参考:https://forum.unity.com/threads/nullreferenceexception-photon-bolt-create-errors-when-building.703850/
12.png
⑤ Play Mode Script->Packed Play Modeを選択する
15.png
⑥ Assets/AddressableAssetsData/AddressableAssetSettingsを開き、「RemoteLoadPath」の値をローカルサーバのアドレスに変更する
16.PNG
⑦ Build->Build Player Contentを押してビルドをする
11.png
⑧ 「Unityのプロジェクトパス/ServerData」の中にビルド後に出力された.bandleデータがあることを確認する

サーバ側の操作

.bundleデータを配置する

こちらではVirtualBoxでCentOS7を動かしてローカルサーバに配置しました。
環境ごとに微妙に操作が違う箇所もあると思いますが、おおまなか流れは共通だと思います。
① サーバを起動し公開ディレクトリに移動
② 公開ディレクトリに「StandaloneWindows64」ディレクトリを作成

> mkdir /var/www/html/StandaloneWindows64

③ 作成したディレクトリにビルド後のファイル類を移動
④ 実行権限の変更を行う

> sudo chmod 777 /var/www/html/StandaloneWindows64/*

※補足:StandaloneWindows64は[UnityEditor.EditorUserBuildSettings.activeBuildTarget]と等しく、
下画像の黄色で囲った部分がそれと対応しています。
今回はPCでテストを行ったためStandaloneWindows64となっています。
17.PNG
公開ディレクトリにファイルを配置していざUnityで実行すると、パスが解決できなかったり、アクセス権がないために取得できないなど、ここが一番ひっかかるポイントが多いと思います。

最後に

いかがだったでしょうか。
実装が成功するとリモートからPrefab Bundleを読み込み、InstantiateしてSceneに表示される様子が確認できると思います。

nisoka
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした