如何从 Unity 上的 C# 静态类获取当前文件夹

Ale*_*qui 2 c# unity-game-engine

我导入了一个 Unity 包,其中多个编辑器脚本依赖于RootPath静态类的属性:

public static class EditorUtils
{
    public static string RootPath => "Assets/HardcodedPath";
}
Run Code Online (Sandbox Code Playgroud)

问题在于该路径是硬编码的,因此包位置根本无法更改。我计划更改该RootPath属性,以便它获取当前脚本位置并使用给定模式搜索父文件夹。这样,即使在我自己的自定义包中(即在 Packages 文件夹而不是 Assets 文件夹中),我也可以使用此包。

缺少的部分是我找不到从代码中获取此静态类文件夹位置的方法。谁能帮我这个?

Mil*_*bec 8

深入研究 AssetDatabase 并找到对您的脚本的引用。这应该会返回您想要的内容。

public static class EditorUtils
{
    public static string RootPath
    {
        get
        {
            var g = AssetDatabase.FindAssets ( $"t:Script {nameof(EditorUtils)}" );
            return AssetDatabase.GUIDToAssetPath ( g [ 0 ] );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这也适用于包中的脚本。请记住更改EditorUtils为您的脚本名称。

这是相关的 Unity 文档。

  • 脚本中的“EditorUtils”是否名为 EditorUtils.cs?您只需更改“t:Script EditorUtils”即可反映脚本的实际名称。例如,如果它是“Tools.cs”,则为“t:Script Tools”。可以确认这有效,刚刚测试过。 (2认同)