3

对不起我的英语(谷歌翻译)。以下是在选定目录 (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)获取调用该方法的目录的路径。


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

提前感谢您的回答!


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

4

2 回答 2

0

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

[CreateAssetMenu(menuName = "MyApp/TestClass")]
public class TestClass: ScriptableObject
{
}
于 2020-08-20T10:00:43.047 回答
0

虽然 HedgehogNSK 的回答肯定是正确的,但您可能会发现自己想要在Create菜单上下文之外的当前文件夹中创建资产(例如,通过 custom EditorWindow)。在这种情况下,您可以使用编辑器内部执行的相同方法,ProjectWindowUtil.CreateAsset(Object asset, string path). 这将从提供​​的对象创建一个资产,并让用户有机会重命名它,就像 do 下的默认条目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 参考源中轻松找到。CreateAsset特别是现在已经存在了好几年,所以可以肯定地假设它不会去任何地方。

于 2021-01-15T05:52:27.523 回答