版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/n_moling/article/details/81061756
通过Resources.FindObjectsOfTypeAll查找所有GameObject,然后通过.hideFlags == HideFlags.None判断是否为存在于Hierarchy面板。(此为编辑器脚本)
详细代码:
/************************************************************
FileName: DeleteMissingScripts.cs
Author:末零 Version :1.0 Date: 2018-7-13
Description:删除所有Miss的脚本
************************************************************/
using UnityEngine;
using UnityEditor;
public class DeleteMissingScripts: MonoBehaviour {
[MenuItem("Tools/Delete Missing Scripts")]
static void CleanupMissingScript()
{
GameObject[] pAllObjects = (GameObject[])Resources.FindObjectsOfTypeAll(typeof(GameObject));
int r;
int j;
for (int i = 0; i < pAllObjects.Length; i++)
{
if (pAllObjects[i].hideFlags == HideFlags.None)//HideFlags.None 获取Hierarchy面板所有Object
{
var components = pAllObjects[i].GetComponents<Component>();
var serializedObject = new SerializedObject(pAllObjects[i]);
var prop = serializedObject.FindProperty("m_Component");
r = 0;
for (j = 0; j < components.Length; j++)
{
if (components[j] == null)
{
prop.DeleteArrayElementAtIndex(j - r);
r++;
}
}
serializedObject.ApplyModifiedProperties();
}
}
}
}