天天看點

Unity 删除missing腳本元件傳回目錄

        通過Resources.FindObjectsOfTypeAll查找所有GameObject,然後通過.hideFlags == HideFlags.None判斷是否為存在于Hierarchy面闆。(此為編輯器腳本)

詳細代碼:

/*******************************************************************************
* 版本聲明:v1.0.0
* 類 名 稱:DeleteMissingScripts
* 建立日期:8/10/2019 5:04:13 PM
* 作者名稱:末零
* 功能描述:删除所有Miss的腳本
******************************************************************************/

using UnityEngine;
using UnityEditor;

public class DeleteMissingScripts
{
    [MenuItem("MyTools/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();
            }
        }
    }
}
           

傳回目錄