• 获得预设体缩略图工具


    MenuItem命令(特性)

    MenuItem属性可以把任意静态函数变成一个菜单命令,在Unity3D中仅静态函数能使用这个属性。

    在创建菜单时,可以指定特定的字符来为菜单添加快捷键,如下所示:

    字符%表示Windows上的ctrl键, OS X上的cmd键

    字符#表示shift键

    字符&表示alt键

    字符_表示单键(非组合),例如_g,表示快捷键G。

    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using UnityEditor;
    using UnityEngine;
    
    public class ThumbnaiWindow : EditorWindow
    {
        
        private string outPath = "Assets/TestPrefab";
        List<PrefabObj> m_ObjPath = new List<PrefabObj>();
    
        [MenuItem("Tools/Thumbnais")]
        public static void ShowWindow()
        {
            
            EditorWindow.GetWindow(typeof(ThumbnaiWindow));
            Selection.selectionChanged = () =>
            {
                Debug.Log("change");
            };
        }
         private Vector2 scrollTextureView = Vector2.zero;
    
         void OnGUI()
         {
             scrollTextureView = GUILayout.BeginScrollView(scrollTextureView);
             EditorGUILayout.BeginHorizontal();
    
             GUILayout.Label("导出路径:");
             outPath = GUILayout.TextField(outPath);
             EditorGUILayout.EndHorizontal();
    
             GUILayout.Label("加入对象:", EditorStyles.boldLabel);
         
             
             for (int i = 0; i < m_ObjPath.Count; ++i)
             {
                 EditorGUILayout.BeginHorizontal();
                 string assetPath = m_ObjPath[i].path;
                 var obj = AssetDatabase.LoadAssetAtPath<GameObject>(assetPath);
    
                 EditorGUI.BeginChangeCheck();
                 var newPrefab = EditorGUILayout.ObjectField(obj, typeof(GameObject), false);
                 
                 if (EditorGUI.EndChangeCheck())
                 {
                     var newPath = AssetDatabase.GetAssetPath(newPrefab);
                     m_ObjPath[i].path = newPath;
                     m_ObjPath[i].name = newPrefab.name;
                 }
                 if (GUILayout.Button("删除"))
                 {
                     m_ObjPath.RemoveAt(i);
                 }
                 EditorGUILayout.EndHorizontal();
             }
    
             EditorGUILayout.BeginHorizontal();
             if (GUILayout.Button("添加空物体"))
             {
                 m_ObjPath.Add(new PrefabObj());
    
             }
    
             if (GUILayout.Button("添加所选对象"))
             {
                 GameObject[] objs = Selection.gameObjects;
                 for (int j = 0; j < objs.Length; j++)
                 {
                     AddPrefabobj(objs[j]);
                 }
             }
    
             EditorGUILayout.EndHorizontal();
    
             EditorGUILayout.BeginHorizontal();
             if (GUILayout.Button("导出缩略图"))
             {
                 ExportThumbnail();
             }
    
             if (GUILayout.Button("清除所有配置"))
             {
                 m_ObjPath.Clear();
             }
    
             EditorGUILayout.EndHorizontal();
             GUILayout.EndScrollView();
         }
    
    
    
         //从配置导出缩略图
        public void ExportThumbnail()
        {
            for (int i = 0; i < m_ObjPath.Count; i++)
            {
                GameObject obj = AssetDatabase.LoadAssetAtPath<GameObject>(m_ObjPath[i].path);
    
                AssetPreview.SetPreviewTextureCacheSize(1024);
                Texture2D tempTexture = AssetPreview.GetAssetPreview(obj);
    
                if (tempTexture == null || !tempTexture.isReadable)
                {
                    continue;
                }
    
                byte[] bytesThumbnail = tempTexture.EncodeToPNG();
                if (!Directory.Exists(outPath))
                {
                    Directory.CreateDirectory(outPath);
                }
                FileStream outputThumbnail =
                    new FileStream(outPath + "/" + Path.GetFileNameWithoutExtension(m_ObjPath[i].path) +"_Icon"+ ".png",
                        FileMode.Create);
                outputThumbnail.Write(bytesThumbnail, 0, bytesThumbnail.Length);
                outputThumbnail.Flush();
                outputThumbnail.Close();
            }
            AssetDatabase.Refresh();
        }
    
        public void AddPrefabobj(GameObject obj)
        {
            string assetPath = AssetDatabase.GetAssetPath(obj);
            PrefabObj prefabObj = new PrefabObj();
            prefabObj.name = obj.name;
            prefabObj.path = assetPath;
            bool isContian = false;
            for (int i = 0; i < m_ObjPath.Count; i++)
            {
                if (m_ObjPath[i].name == prefabObj.name)
                isContian = true;
               
            }
    
            for (int i = 0; i < m_ObjPath.Count; i++)
            {
                if (m_ObjPath[i].name == null)
                {
                    m_ObjPath.RemoveAt(i);
                }
            }
    
            if(!isContian) m_ObjPath.Add(prefabObj);
            
        }
    
    
        public class PrefabObj
        {
            public string path;
            public string name;
        }
    
    }
    

      

  • 相关阅读:
    C语言寒假大作战02
    C语言寒假大作战01
    学习总结
    C语言I作业11
    C语言I作业10
    C语言I博客作业09
    C语言I作业08
    实验五、单元测试
    实验四 代码审查
    UML 建模工具的安装与使用
  • 原文地址:https://www.cnblogs.com/xingyunge/p/10930989.html
Copyright © 2020-2023  润新知