AddressableアセットシステムのDiagnosticCallbackで参照カウントやAsyncOperationのイベントを取得する方法です。
Unity2020.1.10
Addressables 1.16.15
やりたいこと
いま、Addressableでロードしたアセットの参照カウントがいくつなのかを取得することを考えます。
参照カウントを見るツールとしてEventViewerがあります。
が、今回はこれを使わずコードベースでDiagnosticCallbackを使うことで参照カウントを取得します。
準備
DiagnosticCallbackを使うにはまずAddressable Asset SettingsのSend Profiler Eventにチェックをしておく必要があります。
また準備の二点目として、Play Mode ScriptをSimulate GroupsかUse Exisiting Buildにしておきます。
Use Existing Buildにした場合にはAddressablesのビルドも必要です。
参照カウントを取得する
さてそれではDiagnosticCallbackを使って参照カウントを取得します。
using System; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement; public class Example : MonoBehaviour { private async void Start() { // DiagnosticCallbackを登録 Addressables.ResourceManager.RegisterDiagnosticCallback(DiagnosticCallback); // アセットを読み込む var handle = Addressables.LoadAssetAsync<GameObject>("FooPrefab"); await handle.Task; Addressables.Release(handle); // DiagnosticCallbackを登録解除 Addressables.ResourceManager.UnregisterDiagnosticCallback(DiagnosticCallback); } private void DiagnosticCallback(ResourceManager.DiagnosticEventContext context) { // 参照カウントの変更通知だけログ出力する if (context.Type == ResourceManager.DiagnosticEventType.AsyncOperationReferenceCount) { Debug.Log( "Reference count changed" + $"{Environment.NewLine}Location: {context.Location}" + $"{Environment.NewLine}Reference count: {context.EventValue}"); } } }
上記を実行すると参照カウント変更時にその内容がログ出力されることが確認できます。
取得できるイベントの種類
DiagnosticCallbackを使うと参照カウント以外の情報も取得できます。
取得できるイベントは以下の通りです。
- AsyncOperationが失敗
- AsyncOperation作成
- AsyncOperationの進捗
- AsyncOperationの完了
- AsyncOperationの参照カウント
- AsyncOperationの破棄