因为老的API  Properties.DeleteArrayElementAtIndex(propertyIndex);提示没权限修改,

而unity提供了新的API  GameObjectUtility.RemoveMonoBehavioursWithMissingScript(go); 更方便移除丢失的组件,需要遍历物体下面所有子节点,否则无法移除子节点的丢失组件。

于是重新整理了下清理的编辑器代码,直接贴上:

 1 using System;
2 using UnityEngine;
3 using UnityEditor;
4
5 public class ResTool : Editor
6 {
7 [MenuItem("Tools/清理prefab中所有Missing的脚本")]
8 public static void ClearAllPrefabMissingComponents()
9 {
10 EditorUtility.DisplayProgressBar("Modify Prefab", "Please wait...", 0);
11 string[] assetGUIDs = AssetDatabase.FindAssets("t:Prefab", new string[] { "Assets/Res/Prefab" });
12 try
13 {
14 for (int i = 0; i < assetGUIDs.Length; i++)
15 {
16 string path = AssetDatabase.GUIDToAssetPath(assetGUIDs[i]);
17 // Debug.Log($"path:{path}");
18 GameObject pre = PrefabUtility.LoadPrefabContents(path);
19
20 DeleteRecursive(pre, (go) =>
21 {
22 GameObjectUtility.RemoveMonoBehavioursWithMissingScript(go);
23 });
24 PrefabUtility.SaveAsPrefabAssetAndConnect(pre, path, InteractionMode.AutomatedAction);
25
26 EditorUtility.DisplayProgressBar($"清理Prefab丢失组件", $"当前{pre}, {i}/{assetGUIDs.Length}", i / (float)assetGUIDs.Length);
27 }
28 }
29 catch (Exception e)
30 {
31 Debug.LogError($"{e}");
32 }
33
34 AssetDatabase.SaveAssets();
35 EditorUtility.ClearProgressBar();
36 AssetDatabase.Refresh();
37 }
38
39 /// <summary>
40 /// 遍历所有子节点
41 /// </summary>
42 /// <param name="obj"></param>
43 /// <param name="action"></param>
44 static void DeleteRecursive(GameObject obj, Action<GameObject> action)
45 {
46 action(obj);
47
48 for (int i = 0; i < obj.transform.childCount; i++)
49 {
50 DeleteRecursive(obj.transform.GetChild(i).gameObject, action);
51 }
52
53 }
54
55 }

Unity最新一键清理Prefab中所有MissingComponent的更多相关文章

  1. 一键清理 Nexus 中无用的 Docker 镜像

    现许多团队使用 Nexus 来管理 Docker 镜像,产品不断迭代,镜像仓库占用的磁盘空间也越来越大.由于 Nexus 的控制台并未提供批量操作镜像功能,清理镜像十分不便.本文分享一个清理 Nexu ...

  2. Unity Editor 检查工程Prefab(预设)中的空组件

    在我们做项目的过程中 经常会有预设中出现空的脚本 例如: 导致的原因是因为 脚本的丢失 现在我们来做一个检查工程中有空脚本的预设工具 老规矩直接上代码 放到工程就能用 using UnityEngin ...

  3. Unity一键制作预制体Prefab一键修改Prefab属性

    1.适用于制作多个预制体(一个模型文件下面几百个子物体,都需要制作成预制体,这一个一个拖不是要炸裂) 模型资源如下图 2.模型先放到Resources文件夹下面方便读取,制作完预制体可以给他拖到其他文 ...

  4. Unity脚本在层级面板中的执行顺序测试3

    断断续续的写了3篇,以后有时间可以做成一个系列了 前面2篇测试了GameObject的顺序,以及Awake和OnEnable的时机: Unity脚本在层级面板中的执行顺序测试1 http://www. ...

  5. 一键清理Windows垃圾的BAT文件代码

    @echo off color 0atitle win7一键清理系统垃圾echo ★☆ ★☆ ★☆ ★☆ ★☆★☆★☆ ★☆ ★☆ ★☆ ★☆★echo ★☆ ★☆ ★☆ ★☆ ★☆★☆★☆ ★☆ ★ ...

  6. 发布时一键添加html中的css标签和script标签版本号来防止浏览器缓存

    AppendFileVersion 是一个VSIX插件支持vs2015意以上版本 是我用来发布时一键添加html中的css标签和script标签版本号来防止浏览器缓存 分享给大家! download ...

  7. Solidity 最新 0.5.8 中文文档发布

    本文首发于深入浅出区块链社区 热烈祝贺 Solidity 最新 0.5.8 中文文档发布, 这不单是一份 Solidity 速查手册,更是一份深入以太坊智能合约开发宝典. 翻译说明 Solidity ...

  8. Android 一键清理动画

    版本号:1.0  日期:2014.7.29 2014.7.30 版权:© 2014 kince 转载注明出处   一键清理是非常多Launcher都会带有的功能,其效果也比較美观.实现方式或许有非常多 ...

  9. Unity在Android和iOS中如何调用Native API

    本文主要是对unity中如何在Android和iOS中调用Native API进行介绍. 首先unity支持在C#中调用C++ dll,这样可以在Android和iOS中提供C++接口在unity中调 ...

  10. Unity脚本在层级面板中的执行顺序测试4-附加整理

    测试4为一些附加内容,后续的各种tips都加在此. 前几篇测试的链接: Unity脚本在层级面板中的执行顺序测试1 http://www.cnblogs.com/hont/p/4298110.html ...

随机推荐

  1. 产品分享:Qt鸿图电子智慧白板(适合会议机、电子黑板、电子笔记、电子阅读器等场景),当前版本v1.0.0

    产品   鸿途电子智慧白板.   原理   使用Qt技术为基础,开发的windows/ubuntu/arm电子绘图板,主要为windows,支持触摸鼠标,可以定制跨平台.   适合场景   1.会议机 ...

  2. Qt开发技术:QCharts(四)QChart面积图介绍、Demo以及代码详解

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  3. 【Azure 应用程序见解】在Azure门户中,创建App Service(应用服务)时,无法一起创建Application Insights的问题

    问题描述 创建Web应用时启用监视的问题.Azure管理员(Admin)用户下分配了 一个子用户.但是在使用子用户创建WEB应用的时候,启用 Application Insights 选项的 &quo ...

  4. python中json.dumps() 与json.dump(),json.load()与json.loads()区别?

    json.dumps() 将 Python 对象转换为 JSON 字符串,并返回该字符串.而 json.dump() 将 Python 对象转换为 JSON 字符串,并将该字符串写入文件. json. ...

  5. Python 中read()、 readline() 、readlines()三者之间的区别?

    read()方法用于一次性读取整个文件的内容,并将其作为一个字符串返回. readline()方法用于逐行读取文件的内容.每次调用readline()方法,它会读取文件的下一行,并将其作为一个字符串返 ...

  6. Java //在150之内 是三的倍数 输出Zzz 是5个倍数输出 Lll 是7的倍数输出zlzl

    1 //在150之内 是三的倍数 输出Zzz 是5个倍数输出 Lll 是7的倍数输出zlzl 2 int i =1; 3 for(i = 1; i<=150;i++) 4 { 5 System. ...

  7. idea导入spring源码运行缺失cglib和objenesis的jar包的办法【亲测有效】

    idea导入spring源码运行缺失cglib和objenesis的jar包的办法[亲测有效] 亲测有效,网上说的大多废话 上图,操作如下,运行gradle

  8. 11 .Codeforces Round 891 (Div. 3)E. Power of Points(推公式+前缀和优化)

    E. Power of Points 题解参考 #include <bits/stdc++.h> #define int long long #define rep(i, a, b) fo ...

  9. AtCoder Beginner Contest 338(A~E补题)

    目录 A B C题 D题 E题 A 签到 #include <bits/stdc++.h> #define rep(i,a,b) for(int i = (a); i <= (b); ...

  10. react中css里面 class中的 图片的相对地址 完美解决 backgroundImage

    发现问题:缓存 之前react的图片,也在style里面,也无所谓. 刚做了一个输入框,change的时候改变图片,每次都刷新图片,关键是没缓存,这哪受得了 之前用的: 网上搜索各种插件,替换什么的, ...