Unity 创建文件夹怎么能像他自带的创建文件夹那样可以自己填写名字

正常咱们官网查到的Unity API
public static string CreateFolder (string parentFolder, string newFolderName);
但是这样的话就只能创建固定的命名了。
所以我查了一下官网的Create Folder是怎么实现的

// Create a folder
        [ShortcutManagement.ShortcutAttribute("Project Browser/Create/Folder", typeof(ProjectBrowser), KeyCode.N, ShortcutManagement.ShortcutModifiers.Shift | ShortcutManagement.ShortcutModifiers.Action)]
        public static void CreateFolder()
        {
            StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance<DoCreateFolder>(), "New Folder", EditorGUIUtility.IconContent(EditorResources.emptyFolderIconName).image as Texture2D, null);
        }

附上地址:UnityCsReference/ProjectWindowUtil.cs at master · Unity-Technologies/UnityCsReference (github.com)

她是用了一个StartNameEditingIfProjectWindowExists的方法

我查了一下这个方法
public static void StartNameEditingIfProjectWindowExists(int instanceID, EndNameEditAction endAction, string pathName, Texture2D icon, string resourceFile)
附上地址:Class ProjectWindowUtil (stephenhodgson.github.io)

EndNameEditAction有一个Action,官网是这么写的

internal class DoCreateFolder : EndNameEditAction
        {
            public override void Action(int instanceId, string pathName, string resourceFile)
            {
                string guid = AssetDatabase.CreateFolder(Path.GetDirectoryName(pathName), Path.GetFileName(pathName));
                Object o = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guid), typeof(Object));
                ProjectWindowUtil.ShowCreatedAsset(o);
            }
        }

因为我只需要在最外层命名,里面的结构都是写死的,所以我重写了这个方法来实现我需要再里面嵌套其它文件夹。

using System.IO;
using UnityEditor;
using UnityEditor.Experimental;
using UnityEditor.ProjectWindowCallback;
using UnityEngine;

public class CreateArtResFolder : Editor
{
    [MenuItem("Assets/Create/Folder.ArtRes", priority = 15)]
    static void Init()
    {
        CreateArtFolder();
        Debug.Log("已创建文件夹");
    }

    static void CreateArtFolder()
    {
        ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, CreateInstance<DoCreateFolder>(), "New Folder", EditorGUIUtility.IconContent(EditorResources.folderIconName).image as Texture2D, null);
    }
}

internal class DoCreateFolder : EndNameEditAction
{
    public override void Action(int instanceId, string pathName, string resourceFile)
    {
        string guid = AssetDatabase.CreateFolder(Path.GetDirectoryName(pathName), Path.GetFileName(pathName));
        AssetDatabase.CreateFolder(pathName, "Materials");
        Object o = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guid), typeof(Object));
        ProjectWindowUtil.ShowCreatedAsset(o);
    }
}

在底下DoCreateFolder类里面写内层的文件夹结构
增加一个AssetDatabase.CreateFolder(pathName, "Materials");
pathName可以直接拿到的当前创建好后的文件夹完整内部路径,所以可以按照这个思路往里面添加其它文件夹。

附上 Unity 官方源码地址:Unity-Technologies/UnityCsReference: Unity C# reference source code. (github.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Boyce Lig

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值