コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】アセットバンドル化するアセットがアプリに内包するアセットから参照されていないか確認できる「AssetReferenceFinder」紹介

はじめに

「UnitySamples」リポジトリに含まれている
「AssetReferenceFinder.cs」を使用することで
アセットバンドル化するアセットが
アプリに内包するアセットから参照されていないか確認できます

使用例

f:id:baba_s:20190326144719p:plain

例えば、アセットバンドル化するアセットが含まれている「AssetBundle」フォルダと
アプリに内包するアセットが含まれている「NotAssetBundle」フォルダが存在するとして

「NotAssetBundle」フォルダに含まれているマテリアルやプレハブが、
「AssetBundle」フォルダのテクスチャを参照してしまっているとします

f:id:baba_s:20190326144726p:plain

「AssetBundle」フォルダを選択した状態で

f:id:baba_s:20190326144732p:plain

Unity メニューの「Kayac > AssetReferenceFinder」を選択すると
Unity プロジェクトのフォルダに「AssetReferenceFinder.txt」が生成されます

Assets/NotAssetBundle/Image.mat
    Assets/AssetBundle/f001.png
Assets/NotAssetBundle/Image.prefab
    Assets/AssetBundle/f001.png

「AssetReferenceFinder.txt」を開いてみると、
「NotAssetBundle」フォルダに含まれているマテリアルやプレハブが、
「AssetBundle」フォルダのテクスチャを参照してしまっていることがわかります

Windows の場合

Windows で使用してみたところ、そのままだと使用できず、4箇所修正が必要でした

69行目

_targetAssetPaths.Add(path.Replace( "\\", "/" ));

111行目

output.Flush();
output.Close(); //追加

123 行目

_targetAssetPaths.Add(childPath.Replace( "\\", "/" ));

132 行目

_targetAssetPaths.Add(childPath.Replace( "\\", "/" ));

参考サイト様