検証環境
- Unity 2018.4.8f1
概要
リネーム前
using UnityEngine; public class Example : ScriptableObject { }
例えば Example という名前の ScriptableObject のクラスを定義して
すでにアセットを作成している場合、
Project ビューで「t:Example」形式で検索するとちゃんとヒットします
using System.Linq; using UnityEditor; using UnityEngine; public static class Tools { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var guid = AssetDatabase .FindAssets( "t:Example" ) .FirstOrDefault(); var path = AssetDatabase.GUIDToAssetPath( guid ); var example = AssetDatabase.LoadAssetAtPath<Example>( path ); Debug.Log( example != null ); // True } }
AssetDatabase.FindAssets( "t:Example" ) でもちゃんとヒットします
リネーム後
using UnityEngine; public class Example2 : ScriptableObject { }
この状態で Example クラスを Example2 にリネームして
スクリプトファイルの名前も Example2 に変更して
先ほど検索にヒットしたアセットが
リネーム後のスクリプトを正しく参照していることを確認します
この状態で先ほどと同様に Project ビューで「t:Example2」で検索してみると
ヒットしなくなっていることが確認できます
AssetDatabase.FindAssets( "t:Example2" ) でもヒットしません
(正確にはヒットしますがメンバにアクセスしようとすると null 例外になります)
新しく Example2 アセットを作成した場合は検索にヒットすることが確認できます
このように、ScriptableObject のクラス名を変更すると
すでに作成済みの ScriptableObject のアセットは
AssetDatabase.FindAssets( "t:XXXX" ) でヒットしなくなってしまうようです
対策
いくつか調べてみましたが、今のところ対策は見つかっていません
一応、アセットを作り直せばヒットするようになります