(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]

Addressable Assetsのアドレスの重複を検知する【Unity】【Addressable Assets】【エディタ拡張】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2018.4.8f1


はじめに

Addressable Assetsのアドレスはファイル名とは別に自由に設定できますが、

なんと同じアドレスを設定する事が出来てしまいます。

f:id:kan_kikuchi:20191004094933j:plain


しかも設定時、ロード時共にエラーも出ないので、

気付かず重複していて、思ったのと違うのをロードしていたなんて事にもなりかねません。

using UnityEngine;
using UnityEngine.AddressableAssets;//Addressablesを使うのに必要

public class NewBehaviourScript : MonoBehaviour {

  private void Start () {
    //AlchemistというAddress(3件重複している)のSpriteを非同期でロード
    Addressables.LoadAssetAsync<Sprite>("Alchemist").Completed +=  op => { 
      //ロード結果をログで確認
      Debug.Log(op.Result.name);
    };
  }
	
}
f:id:kan_kikuchi:20191002112503j:plain


という事で、Addressable Assetsのアドレスの重複を検知するエディタ拡張を作ってみました!

f:id:kan_kikuchi:20191004101449g:plain


なお、記事中の画像は以下のアセットを使っております。





AddressDuplicateDetecter

さっそくAddressable Assetsのアドレスの重複を検知するクラス

AddressDuplicateDetecterのプログラムです!



AddressDuplicateDetecterを生成後、上部にある

監視対象のディレクトリへのパス(TARGET_DIRECTORY_PATH)を設定すれば、

//監視対象のディレクトリへのパス
private static readonly string TARGET_DIRECTORY_PATH = "Assets/AddressableAssetsData/AssetGroups";
f:id:kan_kikuchi:20191004100804j:plain


Tools/Detect/Address Duplicateが実行出来るようになり、

f:id:kan_kikuchi:20191004100837j:plain


実行時にアドレスの重複があればエラーを表示するようになります。

f:id:kan_kikuchi:20191004100856j:plain


また、アドレスを変更したり、新たなアセットを追加したりなどの

変更があると、自動で重複をチェックするようにもなります。

f:id:kan_kikuchi:20191004101449g:plain