在Unity的API文档中写到,需将Gizmos图标放到Assets/Gizmos下,Gizmos一般都是作为脚本的附件,而放在Assets/Gizmos文件夹中并不好和脚本一起移动,因为Gizmos文件夹又不像Editor以及Pluging被unity所识别,所以有了此问题和解决方案。
实际Icon填写的路径是项目中以Assets文件夹为根的绝对路径,所以以下是成立的。
Gizmos.DrawIcon("this.transform.position, Assets/Scripts/Gizmos/image.png");
但由于脚本的位置可能往往不能确定,就需要获取一个脚本所在的文件夹,使用UnityEditor.AssetDatabase
这里稍微说一下AssetDatabase.FindAssets这个方法,要求传入一个filter字符串,除了Asset名之外,还可以增加label与type。
"Ground t:texture2d" 获取一个type为texture2d,名为Ground的Asset。
我们的脚本是继承于MonoBehaviour的,所以type应该为MonoScript
private static string GetGizmosDir(string scriptName) { var paths = UnityEditor.AssetDatabase.FindAssets($"{scriptName} t:{nameof(MonoScript)}"); var scriptFullName = UnityEditor.AssetDatabase.GUIDToAssetPath(paths[0]); var folder = System.IO.Path.GetDirectoryName(scriptFullName).Replace('\\', '/'); return $"{folder}/Gizmos"; }
文章评论