【问题标题】:How to get the path to the current directory? (ScriptableObject, UnityEditor.AssetDatabase)如何获取当前目录的路径? (ScriptableObject, UnityEditor.AssetDatabase)
【发布时间】:2017-08-20 20:21:49
【问题描述】:

对不起我的英语(谷歌翻译)。以下是一段在选定目录(Assets/Resources/TestObject.asset)中创建资产(ScriptableObject)的代码:

[MenuItem("Assets/Create/Test Object")]
private static void CreateTestObject()
{
    var testObject = ScriptableObject.CreateInstance<TestObject>();
    AssetDatabase.CreateAsset(testObject, "Assets/Resources/TestObject.asset");
    AssetDatabase.SaveAssets();
}

如何获取我所在目录的路径?为了不手动硬编码路径,而是将此游戏对象保存在我调用该方法的同一文件夹中。


例如:

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

2) 在同一个目录中,它创建了一个资产(TestObject)。并且不会在 Assets/Resources 中创建。

综上所述,我需要通过菜单(Assets/Create/Test Object)获取我调用该方法的目录的路径。


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

提前感谢您的回答!


Example (screenshot): 如何获得以红色突出显示的路径。我将通过菜单调用该方法(创建/测试对象)。在我选择的目录中 (Assets/TestFolder/TestFolder2)。并且资产是在那里创建的。而不是在资产/资源中。我需要一个向我返回字符串的方法:Assets/TestFolder/TestFolder2.

【问题讨论】:

    标签: c# unity3d unity5 unity2d unity-editor


    【解决方案1】:

    使用[CreateAssetMenu] 创建ScriptableObject,而不是[MenuItem]
    当您使用 CreateAssetMenu 属性时,它会向 Assets 添加选项 -> Create 在当前文件夹中创建对象。

    [CreateAssetMenu(menuName = "MyApp/TestClass")]
    public class TestClass: ScriptableObject
    {
    }
    

    【讨论】:

      【解决方案2】:

      虽然 HedgehogNSK 的回答肯定是正确的,但您可能会发现自己想要在 Create 菜单上下文之外的当前文件夹中创建资产(例如,通过自定义 EditorWindow)。在这种情况下,您可以使用编辑器在内部执行的相同方法ProjectWindowUtil.CreateAsset(Object asset, string path)。这将根据提供的对象创建一个资产,并让用户有机会重命名它,就像Create 下的默认条目一样。示例:

      private static void CreateTestObject()
      {
          var testObject = ScriptableObject.CreateInstance<TestObject>();
          // Do some custom initialization logic for testObject
          ProjectWindowUtil.CreateAsset(testObject, "TestObject.asset");
      }
      

      ProjectWindowUtil 类没有记录,但它是 public,可以在 Unity 参考源 here 中轻松找到。 CreateAsset 特别是已经存在了好几年了,所以可以肯定地假设它不会去任何地方。

      【讨论】:

        猜你喜欢
        • 2019-02-18
        • 2014-03-10
        • 1970-01-01
        • 2011-03-26
        • 2012-05-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多