Unity/Addressable
提供: 初心者エンジニアの簡易メモ
目次
- 1 Addressableをscriptで実行
- 2 Addressableとは
- 3 インストール
- 4 Addressableの作り方
- 5 設定確認
- 6 プレイモード選択
- 7 Addressableでビルドしたものを、Addressableを取得
- 8 Addressableの削除
- 9 Addressableの再生成
- 10 ビルド時のパスを確認
- 11 サーバーにAddressableファイルを読み込んで表示
- 12 AddressablesのRemoteLoadPathの変更
- 13 StreamingAssetsディレクトリについて
- 14 "Player content must be built before entering play mode with packed data."エラーが出る場合
- 15 プロジェクトをビルドしたときのAddressableリンクデータ
- 16 参考
Addressableをscriptで実行
Unity/Editor/Addressableビルド [ショートカット]
Addressableとは
外部サーバーで使えるResources
インストール
- Unityメインメニュー/Window/Package Manager/Unity Registryが選択"addressable"を検索
- Addressablesをinstall
Addressableの作り方
- 例として、プレハブを作るのでAssetsの下にResourcesフォルダがなければ作る。
- 適当にプレハブをAssets/Resourcesの下につくる。(例:ButtonGroup)
- inspectorにaddressableのチェックがあるので、チェックを付ける
- チェックをつけると、addressableのpathが生成される(例:ButtonGroup)
- Resources_movedに勝手に移動される。もしくは、作られたファイルをResources以外のdirに入れる。
- 以下SampleScene.csをシーンに連携する
using System.Collections; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; public class SampleScene : MonoBehaviour { void Start() { StartCoroutine(Load()); } IEnumerator Load() { // プレハブ:GameObject、画像:Image、スプライト:Sprite var handle = Addressables.LoadAssetAsync<GameObject>("ButtonGroup"); yield return handle; if (handle.Status == AsyncOperationStatus.Succeeded) { var instance = Instantiate(handle.Result, GameObject.Find("Canvas").transform); } } }
プレビュー実行すると、シーンのCanvasの下に、Addressableで作った、プレハブが表示される。
"Exception encountered in operation CompletedOperation, status=Failed, result= : Exception of type"エラーが出るとき
Addressable化したもののパスが合ってるか確認、PlayModeScript(後述)が、サーバーから取得するようになってないか。
設定確認
- Unityメインメニュー/Window/AssetManagement/Addressable/Groups/Profile/ManageProfiles
BuildTarget:[UnityEditor.EditorUserBuildSettings.activeBuildTarget] LocalBuildPath:[UnityEngine.AddressableAssets.Addressables.BuildPath]/[BuildTarget] LocalLoadPath:{UnityEngine.AddressableAssets.Addressables.RuntimePath}/[BuildTarget] RemoteBuildPath:ServerData/[BuildTarget] RemoteLoadPath:http://localhost/[BuildTarget]
設定変更
設定変更したい場合は、
- Unityメインメニュー/Window/Addressable/Groups/ManageProfiles/Create/NewProfileを選択し、
- 各項目を入力していく
プレイモード選択
- Unityメインメニュー/Window/Addressable/Groups/PlayModeScriptを選択
- Use Asset Database (fastest):Unity内のアセットから
- Simulate Groups (Advanced):依存関係を分析して取得
- Use Existing Build(requires built groups):パックプレイモードで、サーバーから取得
Addressableでビルドしたものを、Addressableを取得
- 上記のPlayModeScriptを"Use Existing Build"へ
- Addressableをビルドする(Unityメインメニュー/Window/Asset Management/Addressables/Groups/Build/New Build/Default Build Script
- プレビュー実行
ちなみにBuild時に以下のようなファイルが出来る。
- Library/com.unity.addressables/aa/WebGL/WebGL/AddressablesLink
- Library/com.unity.addressables/aa/WebGL/WebGL/catalog.json
- Library/com.unity.addressables/aa/WebGL/WebGL/settings.json
- ServerData/WebGL/defaultlocalgroup_assets_all_69745f2bc65176429eb31f083306322b.bundle
Addressableの削除
- Unityメインメニュー/Window/Asset Management/Addressables/Groupsを選択
- 以下3種類削除操作がある
- Build/CleanBuild/All → 以下2つのLibrary/com.unity.addressablesと、Library/BuildCacheが、削除される
- Build/CleanBuild/"Content Builders" → Library/com.unity.addressables が、削除される
- Build/CleanBuild/"Build Pipeline Cache" → Library/BuildCache が、削除される
Addressableの再生成
- Unityメインメニュー/Window/Asset Management/Addressables/Groups
- Build/New Build/Default Build Script
プロジェクト以下/ServerData/WebGL/とかにできる
ServerData/WebGL/catalog_v1.0.hash ServerData/WebGL/catalog_v1.0.json ServerData/WebGL/localization-assets-shared_assets_all.bundle ServerData/WebGL/localization-string-tables-chinese(traditional)(zh-tw)_assets_all.bundle ServerData/WebGL/localization-string-tables-english(unitedstates)(en-us)_assets_all.bundle ServerData/WebGL/localization-string-tables-japanese(japan)(ja-jp)_assets_all.bundle
ビルド時のパスを確認
- Assets/AddressableAssetsData/AssetGroups/Default Local Group
- BuildPathとLoadPathに何を設定してるか確認。
- LocalBuildPath:Library/com.unity.addressables/aa/WebGL/WebGL
- LocalLoadPath:{UnityEngine.AddressableAssets.Addressables.RuntimePath}/WebGL
- RemoteBuildPath:ServerData/WebGL
- RemoteLoadPath:ttp://localhost/WebGL
サーバーにAddressableファイルを読み込んで表示
- Assets/AddressableAssetsData/AssetGroups/Default Local Group
- BuildPathにRemoteBuildPathを設定し、
- LoadPathにRemoteLoadPathを設定
- Addressableをビルドし、(Unityメインメニュー/Window/Asset Management/Addressables/Groups/Build/New Build/Default Build Script
- ServerData/WebGLにできたファイルを自分のサーバー(例:ttp://localhost/WebGL/~)へ上げる。
- Unityメインメニュー/Window/Addressable/Groups/Profile/ManageProfilesのRemoteLoadPathをttp://localhost/[BuildTarget]から、自分のサーバー(例:ttp://localhost/WebGL/~)のファイルのある場所へ。
- プレイモード(Unityメインメニュー/Window/Addressable/Groups/PlayModeScript)をUse Existing Buildへ
- プレビュー表示すると表示される。
AddressablesのRemoteLoadPathの変更
- Window/Asset Management/Addressables/Groups
- Profile:WebGLを選択
- ManageProfiles
- RemoteLoadPathを変更する
https://qiita.com/tetr4lab/items/1b26755089820b041b4f
StreamingAssetsディレクトリについて
Addressableをビルドして、UnityプロジェクトのWebGLをBuildすると、
- Build
- TemplateData
- index.html
と同じ場所に、
- StreamingAssets
ができる。
"Player content must be built before entering play mode with packed data."エラーが出る場合
詳細エラーメッセージ
Player content must be built before entering play mode with packed data. This can be done from the Addressables window in the Build->Build Player Content menu command. UnityEngine.GUIUtility:ProcessEvent
一度addressableをビルドする。
プロジェクトをビルドしたときのAddressableリンクデータ
プロジェクトビルドファイルの下に、"StreamingAssets"ができる。 これがないとAddressableにアクセスできない。
参考
https://robamemo.hatenablog.com/entry/2021/01/08/195415