在我们做项目的过程中 经常会有预设中出现空的脚本

例如:

导致的原因是因为 脚本的丢失

现在我们来做一个检查工程中有空脚本的预设工具

老规矩直接上代码 放到工程就能用

  1. using UnityEngine;
  2. using UnityEditor;
  3. using System.IO;
  4. using System.Collections.Generic;
  5.  
  6. public class PrefabTool : EditorWindow
  7. {
  8. [MenuItem("Prefab Tool/Check Missing Scripts")]
  9. static void CheckMissingScripts()
  10. {
  11. List<string> listString = new List<string>();
  12.  
  13. CollectFiles(Application.dataPath, listString);
  14.  
  15. for (int i = ; i < listString.Count; i++)
  16. {
  17. string Path = listString[i];
  18.  
  19. float progressBar = (float)i / listString.Count;
  20.  
  21. EditorUtility.DisplayProgressBar("Check Missing Scripts", "The progress of : " + ((int)(progressBar * )).ToString() + "%", progressBar);
  22.  
  23. if (!Path.EndsWith(".prefab"))//只处理prefab文件
  24. {
  25. continue;
  26. }
  27.  
  28. Path = ChangeFilePath(Path);
  29.  
  30. AssetImporter tmpAssetImport = AssetImporter.GetAtPath(Path);
  31.  
  32. GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(tmpAssetImport.assetPath);
  33.  
  34. if (prefab == null)
  35. {
  36. Debug.LogError("空的预设 : " + tmpAssetImport.assetPath);
  37.  
  38. continue;
  39. }
  40.  
  41. Transform[] transforms = prefab.GetComponentsInChildren<Transform>();
  42. //获取所有的子节点;
  43.  
  44. for (int j = ; j < transforms.Length; j++)
  45. {
  46. GameObject obj = transforms[j].gameObject;
  47.  
  48. var components = obj.GetComponents<Component>();
  49. //获取对象所有的Component组件
  50. //所有继承MonoBehaviour的脚本都继承Component
  51.  
  52. for (int k = ; k < components.Length; k++)
  53. {
  54. if (components[k] == null)
  55. {
  56. Debug.LogError("这个预制中有空的脚本 :" + tmpAssetImport.assetPath + " 挂在对象 : " + obj.name + " 上");
  57. }
  58. }
  59. }
  60. }
  61. EditorUtility.ClearProgressBar();
  62. }
  63.  
  64. //改变路径
  65. //这种格式的路径 "C:/Users/XX/Desktop/aaa/New Unity Project/Assets\a.prefab" 改变成 "Assets/a.prefab"
  66. static string ChangeFilePath(string path)
  67. {
  68. path = path.Replace("\\", "/");
  69. path = path.Replace(Application.dataPath + "/", "");
  70. path = "Assets/" + path;
  71.  
  72. return path;
  73. }
  74.  
  75. //迭代获取文件路径;
  76. static void CollectFiles(string directory, List<string> outfiles)
  77. {
  78. string[] files = Directory.GetFiles(directory);
  79.  
  80. outfiles.AddRange(files);
  81.  
  82. string[] childDirectories = Directory.GetDirectories(directory);
  83.  
  84. if (childDirectories != null && childDirectories.Length > )
  85. {
  86. for (int i = ; i < childDirectories.Length; i++)
  87. {
  88. string dir = childDirectories[i];
  89. if (string.IsNullOrEmpty(dir)) continue;
  90. CollectFiles(dir, outfiles);
  91. }
  92. }
  93. }
  94. }

参考 Unity3D研究院编辑器之不实例化Prefab获取删除更新组件(十五) | 雨松MOMO程序研究院

链接:http://www.xuanyusong.com/archives/3727

这篇博客里面那个删除空脚本的方法 我测试 发现有问题 并不能用!

Unity Editor 检查工程Prefab(预设)中的空组件的更多相关文章

  1. Unity 处理预设中的中文

    Unity 处理预设中的中文 需求由来 项目接入越南版本 需要解决的文本问题 获取UI预设Label里面的中文(没被代码控制)提供给越南 Label里面的中文替换成越南文 解决流程 迭代获取Asset ...

  2. 【Unity】3.2 利用预设(Prefab)制作可复用的组件

    分类:Unity.C#.VS2015 创建日期:2016-04-02 一.简介 预制体(Prefab,也叫预设)是"存储在工程视图(Project View)中"的一种特殊的资源, ...

  3. Unity编程标准导引-2.2Unity中的基本概念

    2.2Unity中的基本概念 上述介绍提到了几个概念:游戏对象.场景.资源.相机,这个小节我们来深入了解,同时进行一些实践性操作.不过首先,我们需要大概了解一下Unity的工程文件夹. 2.2.1工程 ...

  4. 编写 Unity Editor 插件

    Editor Style Viewer 在开发过程中,我喜欢编写一些辅助的Editor插件,方便在游戏开发过程进行调试. 下面是摘自Asset Store的一个查看Unity 默认GUI样式的小工具 ...

  5. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 在脚本中使用MonoBehaviour

    继上次分析了热更新的Demo后,这次来介绍如何在热更新代码中使用MonoBehaviour. MonoBehaviour挂载到GameObject对象上的脚本的基类.平常Unity开发时,简单的做法就 ...

  6. Unity Editor 下创建Lua和Text文件

    预览 在Project视图中,扩展右键菜单,右键 – Create - Text File 创建一个Text文件,或者Lua文件. 关键点 获取当前选择的路径,以Assets路径开头 var sele ...

  7. 【Unity】6.2 在VS2015中调试 C# 脚本

    分类:Unity.C#.VS2015 创建日期:2016-04-16 一.简介 这一节先利用GUI显示一个简单的界面(以后还会专门介绍GUI),并解释如何在VS2015中调试C#脚本. 本节例子的运行 ...

  8. unity接入安卓sdk (unity调用安卓工程)

    1.安装jdk 并且配置环境,这个网上资料很多,这里不说了 2.安卓开发软件eclipse集成环境版 下载地址 http://tools.android-studio.org/index.php/ad ...

  9. unity怎么把工程打包成unitypackage文件

    unity怎么把工程打包成unitypackage文件 想探讨问题的原因 上课的时候,看到老师的磁盘都要爆满了,主要的原因是同学们提交的2DGameKit,工程文件太大了. 文件没有压缩,占用空间是2 ...

随机推荐

  1. 2017全球互联网技术大会回顾(附PPT)

    有幸遇见 GITC2017上海站,刚好遇见你! 为期两天(6.23~24)的GITC大会在上海举行,我有幸参加了24号的那场,也就是上周六,之所以今天才来回顾,是我想等PPT出来后分享给大家! 这应该 ...

  2. Swift 路由机制设计

    设计模式 APP设计模式多种多样,从最初的MVC到MVVM,再到MVP,VIPER等.越来越多的设计模式被开发出来并得以应用,但不论我们用到哪种设计模式,只需要记住高内聚.低耦合那边是好的设计模式.在 ...

  3. JAVA基础——面向对象三大特性:封装、继承、多态

    JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...

  4. URLConnection调用接口

    写在前面: 项目是java web,jdk1.4,weblogic 7;对方.net系统,用wcf开发的接口.对方提供接口url地址,以及说明用post方式去调用,无需传递参数,直接返回json ar ...

  5. cygwin安装gcc/g++

    安装cygwin如果按照默认的方式一直点下去的话,安装完了会发现没有安装gcc/g++. 这个时候可以在安装文件的目录打开命令行,并输入: setup-x86_64.exe -q -P wget -P ...

  6. 今天get到的两个angular知识点

    angular 控制器$scope依赖注入的正确写法 <div ng-controller="ctrl"> {{name}} {{age}} <div ng-co ...

  7. Oracle trunc()函数的用法--来着心静禅定ing

    1.TRUNC(for dates) TRUNC函数为指定元素而截去的日期值. 其具体的语法格式如下: TRUNC(date[,fmt]) 其中: date 一个日期值 fmt 日期格式,该日期将由指 ...

  8. 使用C#创建简单的WCF服务

    一.开发环境 操作系统:Windows 10 开发环境:VS2015 编程语言:C# IIS版本:10.0.0.0 二.添加WCF服务.Internet Information Services(II ...

  9. Python: Pandas运算的效率探讨以及如何选择高效的运算方式

    本文就Pandas的运行效率作一个对比的测试,来探讨用哪些方式,会使得运行效率较好. 测试环境如下: windows 7, 64位 python 3.5 pandas 0.19.2 numpy 1.1 ...

  10. JavaScript一个cookie存储的类

    所有输出都在浏览器的控制台中 <script type="text/javascript"> /** * cookieStorage.js * 本类实现像localSt ...