LiteralliJeff 发表于 2021-4-14 08:43

Unity Prefab 缩略图全黑无法预览

在Unity开发中经常遇到一种情况:就是在Unity编辑器中Project窗口Prefab无法预览,缩略图是一张全黑的图片,这其实非常不友好,尤其是对美术的小伙伴。虽然系统自带刷新,重新导入之类的功能,但是偶尔有效偶尔无效。大大降低了工作效率,浪费了大把时间在找资源上。
这里做了个小工具,反正我把自己项目里的所有缩略图不能预览的prefab都解决了,其他的也没多做测试。可能能帮到你,也可能浪费你感情。莫怪。

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;public class ProjectController{    static Texture m_sPrefabIcon;    static Texture m_spPriviewIcon;    static string m_activeObjPath;    static string m_name;        static void InitializeOnLoadMethod()    {      EditorApplication.projectWindowItemOnGUI = delegate (string guid, Rect selectionRect)      {            m_activeObjPath = AssetDatabase.GetAssetPath(Selection.activeObject);            if (Selection.activeObject &&                guid == AssetDatabase.AssetPathToGUID(m_activeObjPath))            {                                    if(m_activeObjPath.EndsWith(".prefab") )                {                  OnGUI(selectionRect, Selection.activeObject);                }                else if(m_activeObjPath.EndsWith(".mat"))                {                  OnGUI(selectionRect, Selection.activeObject);                }                else                {                  if(m_activeObjPath.LastIndexOf('.') > 0)                  {                        m_name = m_activeObjPath.Substring(m_activeObjPath.LastIndexOf('.'));                  }                           if (GUI.Button(selectionRect, m_name))                  {                        Debug.LogFormat("click:{0}", Selection.activeObject.name + "Path:" + m_activeObjPath + "" + m_name);                  }                }            }      };    }    private static void OnGUI(Rect rect , Object obj)    {      //设置按钮区域      float width = 50f;      rect.x += rect.width * 0.5f;      rect.y += 2f;      rect.width = width;      rect.height -= 20;      //m_sPrefabIcon = PrefabUtility.GetIconForGameObject((GameObject)Selection.activeObject);      m_spPriviewIcon = AssetPreview.GetAssetPreview(obj) as Texture;         if (GUI.Button(rect, m_spPriviewIcon))      {            Debug.LogFormat("click:{0}", obj.name);            if (m_spPriviewIcon == null)                Debug.LogFormat("click:{0}", "没有priview");      }      Rect freshRect = rect;      freshRect.y = rect.y + rect.height;      freshRect.height = 20;      if (GUI.Button(freshRect, "刷新"))      {            Fresh(Selection.activeObject);      }    }    private static void Fresh(Object obj)    {                  EditorUtility.SetDirty(obj);      AssetDatabase.SaveAssets();      AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);    }}
页: [1]
查看完整版本: Unity Prefab 缩略图全黑无法预览