• 导出预设体的缩略图工具


    在Unity中,美术如果没有时间给每一个预设体对象做对应的预设体图片,这种方式可以有效的节约美术的时间成本

    生成的缩略图在UI效果要求不高的前提下,生成的图片可以直接使用的

    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; } }

      

  • 相关阅读:
    语言只是个工具
    最近学到的一点东西
    iBeacon开发
    马上着手开发Mac应用程序
    Text Kit入门
    Text Kit进阶
    Web Notification
    Objective-C异步编程
    Clang Language Extensions
    黑客与画家
  • 原文地址:https://www.cnblogs.com/xingyunge/p/11928899.html
Copyright © 2020-2023  润新知