查找图片丢失

    技术2022-07-11  96

    using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEngine.UI;

    public class FindMissingImage : BaseEditorWindow {     private List<GameObject> list = new List<GameObject>();     private Vector2 scrollerPos = new Vector2();     private Object selectObj;     private bool skipHideObject = false;

        [MenuItem("自定义工具/换UI工具/查找图片丢失")]

        private static void ShowWindow()     {         EditorWindow.GetWindow<FindMissingImage>(false, "查找图片丢失");     }

        private void OnGUI()     {         this.skipHideObject = EditorGUILayout.Toggle("跳过隐藏的Object", this.skipHideObject);         if (GUILayout.Button("search"))         {             this.list.Clear();             this.Search();         }         this.scrollerPos = EditorGUILayout.BeginScrollView(this.scrollerPos);         var count = this.list.Count;         if (count > 0)         {             EditorGUILayout.TextArea("数量: " + count);         }         foreach (var obj in this.list)         {             var style = EditorStyles.textField;             if (obj == this.selectObj)                 style = EditorStyles.whiteLabel;             if (GUILayout.Button(obj.name, style))             {                 this.selectObj = obj;                 PingObj(obj);             }         }         EditorGUILayout.EndScrollView();     }

        private void Search()     {         string[] guids = AssetDatabase.FindAssets("t:Prefab", new string[] { "Assets/Game/UIs/Views" });         int endIndex = guids.Length;         if (endIndex < 1)         {             return;         }         float nextTime = 0;         for (int i = 0; i < endIndex; i++)         {             var guid = guids[i];             var path = AssetDatabase.GUIDToAssetPath(guid);             var obj = AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)) as GameObject;             this.Check(obj);             if (nextTime <= Time.realtimeSinceStartup)             {                 bool cancel = EditorUtility.DisplayCancelableProgressBar("searching", path, (float)i / endIndex);                 nextTime = Time.realtimeSinceStartup + 0.1f;                 if (cancel)                 {                     break;                 }             }         }         EditorUtility.ClearProgressBar();     }

        private void Check(GameObject obj)     {            var images = obj.GetComponentsInChildren<Image>(!this.skipHideObject);         foreach (var image in images)         {             if (CheckMissingSprite(image.sprite))             {                 list.Add(image.gameObject);             }         }     }

        private static bool CheckMissingSprite(Sprite sprite)     {         var instanceID = sprite.GetInstanceID();         if (instanceID == 0)             return false;         var instance = AssetDatabase.LoadAssetAtPath(AssetDatabase.GetAssetPath(instanceID), typeof(Sprite));         if (null == instance)         {             return true;         }         return false;     } }  

    Processed: 0.015, SQL: 9