unity编辑器拓展九——删除场景中丢失的脚本
场景里面有一些丢失的脚本,会造成游戏报警告,还是需要清理干净的
为了方便美术,写个小工具,刚开始还是被坑到了,遍历了所有的物体,
将所有的组件加入到数组里,判断如果组件为空的话删除,但是删不掉 也是醉了
搜索了好久发现了原因,需要先序列化物体,然后得到它的序列化属性,将对应
的属性根据索引删除掉。之后重新应用属性即可。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class deleNullComponent : EditorWindow {[MenuItem("tool/deleComponent")]static void window(){deleNullComponent win = (deleNullComponent)EditorWindow.GetWindow(typeof(deleNullComponent), false, "tool", false);win.Show();}int dex = 0;void OnGUI(){GUIStyle style1 = new GUIStyle();style1.fontSize = 15;style1.normal.textColor = new Color(0.7f, 0.7f, 0.7f);EditorGUILayout.LabelField("▼删除场景中的空脚本", style1, GUILayout.Width(60));EditorGUILayout.LabelField("已经删除了" + " " + dex + " " + "个空脚本", style1, GUILayout.Width(100));dex = 0;//删除场景中的空脚本if (GUI.Button(new Rect(200, 10, 70, 25), "删除")){spaceScrip();}}void spaceScrip(){List<GameObject> sceneRoot = new List<GameObject>();List<GameObject> obj = new List<GameObject>();//得到场景的根节点UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects(sceneRoot);for (int i = 0; i < sceneRoot.Count; i++){Transform[] a = sceneRoot[i].GetComponentsInChildren<Transform>();for (int j = 0; j < a.Length; j++){ GameObject go = a[j].gameObject; //得到数组中的单个objectSerializedObject so = new SerializedObject(go); // 将object序列化var soProperties = so.FindProperty("m_Component");//得到object的Component序列化数组var components = go.GetComponents<Component>();//得到物体的component数组int propertyIndex = 0;foreach (var c in components)//遍历component数组{if (c == null){soProperties.DeleteArrayElementAtIndex(propertyIndex);dex++;}++propertyIndex;}so.ApplyModifiedProperties();//这句话好重要 开始没加上 怎么都不成功 坑死我了 }}//将场景设置为dertif (dex > 0)UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene());}}
亲,如果您觉得本文不错,愿意给我一些动力的话,请用手机扫描二维码即可向我打赏
打赏
unity编辑器拓展九——删除场景中丢失的脚本相关推荐
- Unity Editor自制工具(1)--“Editor目录栏按钮+全局搜索方法+自制Editor窗口”实现搜索与删除场景中任意名称游戏物体
1,制作Editor上方目录按钮 在C#静态方法上方加上[MenuItem("目录")],可在Editor中上方目录栏生成一个按钮. using System.Collection ...
- Unity 编辑器插件-快速删除组件
尊重原著:(1条消息) Unity 编辑器插件-快速删除组件_unity 删除组件_菜菜ANY的博客-CSDN博客 实现删除所选物体及子物体中指定组件.自动apply 同时考虑一个物体上挂在多个相同组 ...
- unity编辑器拓展整理(主要是siki的视频教程)
编辑器拓展 https://blog.csdn.net/zxl321365712/article/details/80080586 蛮牛上一个详细的博客 http://www.manew.com/th ...
- Unity编辑器拓展(Handles/EditorTool)
Handles Scene视图中的自定义 3D GUI 控件和绘制操作. UnityEditor.Handles - Unity 脚本 APIhttps://docs.unity.cn/cn/curr ...
- Unity编辑器拓展-写一个查看当前所有PlayerPrefsKey的窗口
创建一个PlayerPrefsKey查看器 效果图 前言 开发 一.获取数据 目录结构 二.开发编辑器窗口 效果图 思路 一.绘制搜索栏 二.定义PlayerPrefs数据结构体 三.根据搜索框过滤数 ...
- Unity编辑器拓展之三:拓展Unity的Hierarchy面板
博客迁移 个人博客站点,欢迎访问,www.jiingfengji.tech 正文 效果图: 上图中在Hierarchy右侧绘制了Toggle,Label,以及自定义的texture和Unity原声的T ...
- Unity编辑器拓展(Gizmos)
Gizmos 辅助图标用于协助在 Scene 视图中进行视觉调试或设置. 所有辅助图标绘图都必须在此脚本的 OnDrawGizmos 或 OnDrawGizmosSelected 函数中进行. Uni ...
- Unity编辑器拓展之六:利用反射打开Unity Preferences Window
博客迁移 个人博客站点,欢迎访问,www.jiingfengji.tech 如何利用反射打开Unity Preferences Window Unity Preferences Window如下图所示 ...
- unity编辑器扩展_01(在工具栏中创建一个按钮)
代码: [MenuItem("Tools/Test",false,1)] static void Test() { Debug.Log(" ...
- Unity编辑器拓展之五:修改脚本icon
博客迁移 个人博客站点,欢迎访问,www.jiingfengji.tech 正文 Unity修改脚本在Project面板中显示的icon有两种方法, 先看示意图: 方法1:修改脚本的meta文件 脚本 ...
最新文章
- 失败用例重跑机制-python装饰器
- android 字定义GridView 引用自己的定义布局
- 你们的数学老师是怎么读这些符号?
- 【LOJ#572】Misaka Network 与求和(莫比乌斯反演/杜教筛/min_25筛)
- 【Electron】Electron开发入门(八):自定义electron框架外壳(shell)的菜单(Menu)...
- input在iOS里的兼容性
- Linux进程之间通信 信号
- 2017.4.16 麦森数 思考记录
- gcc include lib路径扩展
- Python删除文件中含有特定值的行
- Hvv近期0day总结五
- 计算机组成原理上机试卷,计算机组成原理试卷及答案
- Linux安装ParaView
- 七周成为数据分析师 第一周:数据分析思维
- HBase之一月速成:整合phoenix
- IEEE 802各个协议
- [JAVA毕业设计]高速公路收费管理源码获取和系统演示
- 进阿里一年中最好的机会
- 电信增值短信平台模块清单
- 行业前沿|无人机视觉自主导航发展及视觉智能开发支撑平台介绍