Unity最新一键清理Prefab中所有MissingComponent
因为老的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的更多相关文章
- 一键清理 Nexus 中无用的 Docker 镜像
现许多团队使用 Nexus 来管理 Docker 镜像,产品不断迭代,镜像仓库占用的磁盘空间也越来越大.由于 Nexus 的控制台并未提供批量操作镜像功能,清理镜像十分不便.本文分享一个清理 Nexu ...
- Unity Editor 检查工程Prefab(预设)中的空组件
在我们做项目的过程中 经常会有预设中出现空的脚本 例如: 导致的原因是因为 脚本的丢失 现在我们来做一个检查工程中有空脚本的预设工具 老规矩直接上代码 放到工程就能用 using UnityEngin ...
- Unity一键制作预制体Prefab一键修改Prefab属性
1.适用于制作多个预制体(一个模型文件下面几百个子物体,都需要制作成预制体,这一个一个拖不是要炸裂) 模型资源如下图 2.模型先放到Resources文件夹下面方便读取,制作完预制体可以给他拖到其他文 ...
- Unity脚本在层级面板中的执行顺序测试3
断断续续的写了3篇,以后有时间可以做成一个系列了 前面2篇测试了GameObject的顺序,以及Awake和OnEnable的时机: Unity脚本在层级面板中的执行顺序测试1 http://www. ...
- 一键清理Windows垃圾的BAT文件代码
@echo off color 0atitle win7一键清理系统垃圾echo ★☆ ★☆ ★☆ ★☆ ★☆★☆★☆ ★☆ ★☆ ★☆ ★☆★echo ★☆ ★☆ ★☆ ★☆ ★☆★☆★☆ ★☆ ★ ...
- 发布时一键添加html中的css标签和script标签版本号来防止浏览器缓存
AppendFileVersion 是一个VSIX插件支持vs2015意以上版本 是我用来发布时一键添加html中的css标签和script标签版本号来防止浏览器缓存 分享给大家! download ...
- Solidity 最新 0.5.8 中文文档发布
本文首发于深入浅出区块链社区 热烈祝贺 Solidity 最新 0.5.8 中文文档发布, 这不单是一份 Solidity 速查手册,更是一份深入以太坊智能合约开发宝典. 翻译说明 Solidity ...
- Android 一键清理动画
版本号:1.0 日期:2014.7.29 2014.7.30 版权:© 2014 kince 转载注明出处 一键清理是非常多Launcher都会带有的功能,其效果也比較美观.实现方式或许有非常多 ...
- Unity在Android和iOS中如何调用Native API
本文主要是对unity中如何在Android和iOS中调用Native API进行介绍. 首先unity支持在C#中调用C++ dll,这样可以在Android和iOS中提供C++接口在unity中调 ...
- Unity脚本在层级面板中的执行顺序测试4-附加整理
测试4为一些附加内容,后续的各种tips都加在此. 前几篇测试的链接: Unity脚本在层级面板中的执行顺序测试1 http://www.cnblogs.com/hont/p/4298110.html ...
随机推荐
- 从 vs 的 rc 文件中获取版本号
更新项目版本号时,需要与 rc 文件的 version 同步,比较方便的方法是直接从 rc 文件中获取版本号,并应用到程序中 // 删除日志检查 bool GetVersion() { // get ...
- win32 - 在进程之间获取事件通知(CreateEvent)
只需要记住使用OpenEvent来同步Event对象. Project A: #define _CRT_SECURE_NO_WARNINGS #include <Windows.h> #i ...
- mysql安装及增删改查操作---day35
# ### mysql ''' 命令可以用tab来补全 d: D:\>cd MySQL5.7 D:\>cd D:\MySQL5.7\mysql-5.7.25-winx64\bin 直接切换 ...
- 【LeetCode回溯算法#12】二叉树的直径,树形dp的前置内容(使用dfs)
二叉树的直径 给你一棵二叉树的根节点,返回该树的 直径 . 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 .这条路径可能经过也可能不经过根节点 root . 两节点之间路径的 长度 由它们 ...
- 教程|在矩池云使用 Stable Diffusion web UI v1.5 模型和 ControlNet 插件
今天给大家介绍下如何在矩池云使用 Stable Diffusion web UI v1.5 模型和 Stable Diffusion ControlNet 插件. 租用机器 租用机器需要选择内存大于8 ...
- error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)
起因:自己顶不住好奇心,升级了Mac系统.界面看起来,真香!然鹅用起来其实也挺香,就是有些开发常用的竟然挂掉了,挂掉了. 最直观的就是Parallels Desktop , xcode , git,完 ...
- SpringCloud使用Kafka消费者
目录 POM文件配置 创建kafka配置 系统配置信息 启动入口 POM文件配置 <project xmlns="http://maven.apache.org/POM/4.0.0&q ...
- 【Azure K8S | AKS】在中国区AKS上遇见ImagePullBackOff时的替代方案
问题描述 在AKS集群中部署calico时候,遇见 ImagePullBackOff 问题. 在创建POD calico-typha-horizontal-autoscale 时候遇见拉取镜像失败问题 ...
- C++之指针变量的定义和使用
从b站上黑马程序员的c++课里学到的C++之指针变量的定义和使用 指针变量的定义和使用 简单理解指针就是地址. 内存编号是从0开始记录的,一般用16进制数字表示 1 #include <iost ...
- 16. Class字节码结构
1. 相关概念 1.1字节码文件的跨平台性 Java 语言是跨平台的(write once, run anywhere) 当 Java 源代码成功编译成字节码后,如果想在不同的平台上面运行, 则无须再 ...