91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Unity刪除missing腳本組件的方法

發布時間:2021-04-09 15:25:00 來源:億速云 閱讀:910 作者:啵贊 欄目:開發技術

這篇文章主要介紹“Unity刪除missing腳本組件的方法”,在日常操作中,相信很多人在Unity刪除missing腳本組件的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”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();
            }
        }
    }
}

補充:Unity中一鍵刪除所有已失效的腳本

如下所示:

//刪除所有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();
            }
        }
    }
}

此為編輯器腳本

使用方法:

Unity刪除missing腳本組件的方法

方法二:

using UnityEngine;
using UnityEditor; 
public class DeleteMissingScripts
{
    [MenuItem("Edit/Cleanup Missing Scripts")]
    static void CleanupMissingScripts()
    {
        for (int i = 0; i < Selection.gameObjects.Length; i++)
        {
            var gameObject = Selection.gameObjects[i];
 
            // We must use the GetComponents array to actually detect missing components
            var components = gameObject.GetComponents<Component>();
 
            // Create a serialized object so that we can edit the component list
            var serializedObject = new SerializedObject(gameObject);
            // Find the component list property
            var prop = serializedObject.FindProperty("m_Component");
 
            // Track how many components we've removed
            int r = 0;
 
            // Iterate over all components
            for (int j = 0; j < components.Length; j++)
            {
                // Check if the ref is null
                if (components[j] == null)
                {
                    // If so, remove from the serialized component array
                    prop.DeleteArrayElementAtIndex(j - r);
                    // Increment removed count
                    r++;
                }
            } 
            // Apply our changes to the game object
            serializedObject.ApplyModifiedProperties();
            EditorUtility.SetDirty(gameObject);
        }
    }
}

建議采取方法二

已知兩種方法可能會出現某些錯誤,

方法二運行幾次會自動修復(方法一未測試)

到此,關于“Unity刪除missing腳本組件的方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲周县| 洛扎县| 商南县| 辉南县| 通化市| 铜鼓县| 交城县| 出国| 四川省| 望城县| 翁源县| 霍邱县| 侯马市| 溆浦县| 常山县| 博客| 日照市| 施秉县| 通榆县| 墨脱县| 长兴县| 梧州市| 琼中| 正镶白旗| 新安县| 屏南县| 海阳市| 南宁市| 林州市| 宝丰县| 庄河市| 汽车| 马尔康县| 无棣县| 绥滨县| 靖州| 曲阜市| 龙井市| 富宁县| 菏泽市| 扎囊县|