导出预设体的缩略图工具

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

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值