You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity自定义菜单创建项目结构后自动删除自身脚本失效如何解决

问题原因
  • 资源删除方式错误:直接使用File.Delete操作Unity资产目录下的文件不符合规范,Unity会维护自身的资产数据库索引,直接操作磁盘文件容易出现文件锁定、索引未同步的问题,且不会自动删除对应的.meta文件,会残留冗余文件。
  • 代码结构缺失:你提供的代码片段缺少方法闭合的},且未引入必要的命名空间(UnityEditor、System.IO、System等),本身可能无法正常编译执行。
  • 多余无效代码:AssetDatabase.GUIDToAssetPath(folders);一行既没有赋值也没有逻辑判断,属于无效代码。
修正后完整代码
using System;
using System.IO;
using UnityEditor;
using UnityEngine;

public class Organize : Editor
{
    [MenuItem("Unity/Create structure")]
    static void CreateFolder()
    {
        var items = new string[]
        {
            "Sprites",
            "Scripts",
            "Animation",
            "Materials",
            "Prefabs",
            "Media",
            "Plugins",
            "Models",
            "Textures",
            "Shaders"
        };

        Array.Sort(items);

        foreach (var item in items)
        {
            // 已存在的文件夹不会重复创建,避免报错
            if (!AssetDatabase.IsValidFolder($"Assets/{item}"))
            {
                AssetDatabase.CreateFolder("Assets", item);
            }
        }

        // 优先使用Unity官方API删除资产,自动同步索引、删除对应meta文件
        bool deleteResult = AssetDatabase.DeleteAsset("Assets/Organize.cs");
        // 兜底方案:API删除失败时直接操作磁盘文件
        if (!deleteResult)
        {
            File.Delete($"{Application.dataPath}/Organize.cs");
            File.Delete($"{Application.dataPath}/Organize.cs.meta");
        }
        
        AssetDatabase.Refresh();
    }
}
注意事项
  • 确保脚本名称为Organize.cs,且确实存放在Assets根目录下,如果放在子目录(比如Assets/Editor),需要把删除路径对应修改为Assets/Editor/Organize.cs
  • 因为用到了UnityEditor命名空间下的API,建议将脚本放在Editor目录下,避免项目打包时出现引用报错。

内容的提问来源于stack exchange,提问作者edu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:51:00