10
9

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.

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

Posted at

#はじめに
サーバに配置した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に表示される様子が確認できると思います。

10
9
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
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?