以前弄过一个在项目中查找Asset引用的。虽然很泛用,但跑起来非常的慢。
其实我们实际使用的时候,我们会经常做某一种搜索(比如查找脚本在预制体上的引用)。对于这种需要使用的特定条件的查找,单独做一个小工具可能效率会更高。
本来还在烦恼怎么做,导师很快就做好了,跑起来很快。他告诉我,秘诀是 GetComponent。
思路
代码不方便直接贴出来,但还是想分享(记录)一下几个关键的步骤和思路~
选择脚本
我们需要在编辑器上用一个 field 去放我们想要搜寻的脚本。
但是没办法是用在泛型类上。需要指定实际的类型。
Interface也可以查,放心用!
1 2 3 4 5 6 7 8
| targetScript = EditorGUILayout.ObjectField(m_targetScript, typeof(MonoScript), false) as MonoScript;
Type targetType = m_targetScript.GetClass();
|
获取预制体
从我们选择的目录下获取所有的prefab,相信Unity,这一步不会很慢的。
1 2 3 4 5 6 7
|
var paths = AssetDatabase.FindAssets($"t: prefab", new[] { folderPath }); GameObject[] toCheck = new GameObject[paths.Length]; for (int i = 0; i < paths.Length; i++) toCheck[i] = AssetDatabase.LoadAssetAtPath<GameObject>(AssetDatabase.GUIDToAssetPath(paths[i]));
|
查询引用
1 2 3 4 5
| Type targetType; GameObject prefab; var components = prefab.GetComponents(targetType);
|
总结
如果要说学到了什么的话,大概是做工具前要搞明白它的使用情景,不能太脱节Tw.T