如何获取当前目录的路径?(ScriptableObject,UnityEditor.AssetDatabase)

5
抱歉我的英语不太好(通过Google翻译)。下面是创建资产(ScriptableObject)的代码片段,它将在选定的目录(Assets/Resources/TestObject.asset)中创建资产:
[MenuItem("Assets/Create/Test Object")]
private static void CreateTestObject()
{
    var testObject = ScriptableObject.CreateInstance<TestObject>();
    AssetDatabase.CreateAsset(testObject, "Assets/Resources/TestObject.asset");
    AssetDatabase.SaveAssets();
}

如何获取当前所在目录的路径?为了不手动硬编码路径,而是将该GameObject保存到调用该方法所在的同一文件夹中。


例如:

1)我从Assets/TestFolder/TestFolder2中调用该方法。

2)并且在这个相同的目录中创建一个资源(TestObject)。而不是在Assets/Resources中创建。

总之,我需要获得通过菜单(Assets/Create/Test Object)调用该方法的目录路径。


另外:我可以在创建后立即重命名GameObject吗?与其他对象(脚本、文件夹等)一样。

提前感谢您的回答!


示例(屏幕截图):如何获得红色高亮部分的路径。我将通过菜单(Create/Test Object)调用该方法。在我选择的目录下(Assets/TestFolder/TestFolder2)创建资源。而不是在Assets/Resources中创建。我需要一个返回字符串Assets/TestFolder/TestFolder2的方法。

2个回答

3
虽然HedgehogNSK的回答肯定是正确的,但你可能会遇到这样一种情况:你想在当前文件夹中创建一个资产,而不是通过“创建”菜单(例如,通过自定义的EditorWindow)。在这种情况下,你可以使用编辑器内部使用的相同方法,即ProjectWindowUtil.CreateAsset(Object asset, string path)。这将同时从提供的对象创建一个资产,并给用户重命名的机会,就像“创建”下的默认条目一样。示例:
private static void CreateTestObject()
{
    var testObject = ScriptableObject.CreateInstance<TestObject>();
    // Do some custom initialization logic for testObject
    ProjectWindowUtil.CreateAsset(testObject, "TestObject.asset");
}
ProjectWindowUtil类没有文档说明,但是它是public的,并且可以在Unity参考源代码这里轻松找到。特别是CreateAsset已经存在了好几年了,所以我们可以安全地假设它不会消失。

0
使用[CreateAssetMenu]来创建ScriptableObject,而不是[MenuItem]
当您使用CreateAssetMenu属性时,它会在“资源”->“创建”中添加选项,以在当前文件夹中创建对象。
[CreateAssetMenu(menuName = "MyApp/TestClass")]
public class TestClass: ScriptableObject
{
}

1
有时候这并不是一个选项,例如如果创建文件需要在文件被创建之前执行额外的步骤。 - user3915050

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接