zoukankan      html  css  js  c++  java
  • 导出预设体的缩略图工具

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

      

  • 相关阅读:
    java堆溢出和栈溢出
    一张图看懂JVM
    java学习书籍
    Linux内核、mysql内核、Tcp/Ip内核、java等知识书籍
    mac 下安装mysql8.0
    软件各种系统架构图
    架构师必看:软件架构图的艺术
    JVM
    docker 镜像整理
    自定义ResultMap查询,这里的关联写法只能用于不分页
  • 原文地址:https://www.cnblogs.com/xingyunge/p/11928899.html
Copyright © 2011-2022 走看看