少年修仙传客户端基础资源
hch
2024-04-29 5f05e7aa834f78e3e9ce0994d59b5e4f7e1d7575
0312 导出界面图片工具
2个文件已添加
293 ■■■■■ 已修改文件
Assets/Editor/Tool/ExportPrefabsIMG.cs 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/ExportPrefabsIMG.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/ExportPrefabsIMG.cs
New file
@@ -0,0 +1,282 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
using UnityEngine.UI;
using Snxxz.UI;
using System.Windows.Forms;
using dnlib.DotNet;
//导出已打开的(或者指定名)界面用到的图片
public class ExportPrefabsIMG : EditorWindow {
    private static string topFilePath= "Assets/ResourcesOut/UI/Window/";
    private static string builtInFilePath = "Assets/ResourcesOut/BuiltIn/Prefabs/";
    private static string priorityWindowFilePath = "Assets/ResourcesOut/UI/PriorityWindow/";
    private static ExportPrefabsIMG window = null;
    private Vector2 scrollPosition;
    private static int exportType = 0; //0 运行时界面 1 builtin目录界面 2 window目录界面 3 priorityWindow目录界面
    public class FileToggleInfo
    {
        public FileToggleInfo(string fileName, bool sel)
        {
            fileInfo = fileName;
            isSelect = sel;
        }
        public string fileInfo = null;
        public bool isSelect = false;
    }
    private static List<FileToggleInfo> _tableNameLst = new List<FileToggleInfo>(); //所有表名字列表
    [UnityEditor.MenuItem("策划工具/导出指定界面的图片", false)]
    static void Init()
    {
        exportType = 0;
        window = GetWindow(typeof(ExportPrefabsIMG), true, "导出界面图片,运行时导出会更准确") as ExportPrefabsIMG;
        window.position = new Rect(UnityEngine.Screen.width / 2, UnityEngine.Screen.height / 2, 300, 700);
        window.Show();
    }
    private void OnGUI()
    {
        GUILayout.BeginVertical();
        scrollPosition = GUILayout.BeginScrollView(scrollPosition);
        ShowTableNames();
        GUILayout.EndScrollView();
        GUILayout.FlexibleSpace();
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("刷新运行时界面"))
        {
            exportType = 0;
            GetDicFiles();
        }
        GUILayout.EndHorizontal();
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("刷新builtIn界面"))
        {
            exportType = 1;
            GetDicFiles();
        }
        GUILayout.EndHorizontal();
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("刷新Window界面"))
        {
            exportType = 2;
            GetDicFiles();
        }
        GUILayout.EndHorizontal();
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("刷新PriorityWindow界面"))
        {
            exportType = 3;
            GetDicFiles();
        }
        GUILayout.EndHorizontal();
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("全选"))
        {
            SelectAll();
        }
        GUILayout.EndHorizontal();
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("导出图片"))
        {
            Export();
            MessageBox.Show("导出图片成功!(查看根目录的OpenWindowImages)");
            AssetDatabase.Refresh();
        }
        GUILayout.EndHorizontal();
        GUIUtility.ExitGUI();
    }
    private void ShowTableNames()
    {
        if (_tableNameLst == null)
        {
            return;
        }
        for (int i = 0; i < _tableNameLst.Count; i++)
        {
            string tableName = _tableNameLst[i].fileInfo;
            _tableNameLst[i].isSelect = GUILayout.Toggle(_tableNameLst[i].isSelect, tableName);
        }
    }
    // 0 运行时界面 1 builtin目录界面 2 window目录界面
    private void GetDicFiles()
    {
        _tableNameLst.Clear();
        if (exportType == 0)
        {
            if (!EditorApplication.isPlaying || WindowCenter.Instance.openWinNames.IsNullOrEmpty())
            {
                MessageBox.Show("请在游戏运行时打开界面");
                return;
            }
            foreach (var item in WindowCenter.Instance.openWinNames)
            {
                _tableNameLst.Add(new FileToggleInfo(item.Key, false));
            }
        }
        else if (exportType == 1)
        {
            DirectoryInfo folder = new DirectoryInfo(@builtInFilePath);
            if (folder != null)
            {
                FileInfo[] fileInfoArr = folder.GetFiles("*.prefab");
                if (fileInfoArr == null || fileInfoArr.Length <= 0)
                {
                    return;
                }
                for (int i = 0, length = fileInfoArr.Length; i < length; i++)
                {
                    _tableNameLst.Add(new FileToggleInfo(fileInfoArr[i].Name.Split('.')[0], false));
                }
            }
        }
        else if (exportType == 2)
        {
            DirectoryInfo folder = new DirectoryInfo(@topFilePath);
            if (folder != null)
            {
                FileInfo[] fileInfoArr = folder.GetFiles("*.prefab");
                if (fileInfoArr == null || fileInfoArr.Length <= 0)
                {
                    return;
                }
                for (int i = 0, length = fileInfoArr.Length; i < length; i++)
                {
                    _tableNameLst.Add(new FileToggleInfo(fileInfoArr[i].Name.Split('.')[0], false));
                }
            }
        }
        else if (exportType == 3)
        {
            DirectoryInfo folder = new DirectoryInfo(@priorityWindowFilePath);
            if (folder != null)
            {
                FileInfo[] fileInfoArr = folder.GetFiles("*.prefab");
                if (fileInfoArr == null || fileInfoArr.Length <= 0)
                {
                    return;
                }
                for (int i = 0, length = fileInfoArr.Length; i < length; i++)
                {
                    _tableNameLst.Add(new FileToggleInfo(fileInfoArr[i].Name.Split('.')[0], false));
                }
            }
        }
    }
    private void SelectAll()
    {
        if (_tableNameLst == null)
        {
            MessageBox.Show("请先刷新界面");
            return;
        }
        for (int i = 0; i < _tableNameLst.Count; i++)
        {
            if (_tableNameLst[i] == null)
            {
                continue;
            }
            if (_tableNameLst[i].fileInfo == null)
            {
                continue;
            }
            _tableNameLst[i].isSelect = true;
        }
    }
    private void Export()
    {
        //导出指定界面 或者 选中已打开的界面
        if (!Directory.Exists("OpenWindowImages"))
            Directory.CreateDirectory("OpenWindowImages");
        if (_tableNameLst == null)
        {
            MessageBox.Show("先刷新界面");
            return;
        }
        for (int i = 0; i < _tableNameLst.Count; i++)
        {
            if (!_tableNameLst[i].isSelect)
            {
                continue;
            }
            string fileName = _tableNameLst[i].fileInfo;
            string filePath;
            if (exportType == 0)
            {
                if (WindowCenter.Instance.openWinNames[fileName])
                {
                    filePath = builtInFilePath + _tableNameLst[i].fileInfo + ".prefab";
                }
                else
                {
                    filePath = topFilePath + _tableNameLst[i].fileInfo + ".prefab";
                }
                if (!File.Exists(filePath))
                {
                    filePath = priorityWindowFilePath + _tableNameLst[i].fileInfo + ".prefab";
                }
            }
            else if (exportType == 1)
            {
                filePath = builtInFilePath + _tableNameLst[i].fileInfo + ".prefab";
            }
            else if (exportType == 2)
            {
                filePath = topFilePath + _tableNameLst[i].fileInfo + ".prefab";
            }
            else
            {
                filePath = priorityWindowFilePath + _tableNameLst[i].fileInfo + ".prefab";
            }
            GameObject _prefab = AssetDatabase.LoadAssetAtPath<GameObject>(filePath);
            if (_prefab == null)
            {
                Debug.LogFormat("无法取得文件 {0}", filePath);
                continue;
            }
            Image[] transArr14 = _prefab.GetComponentsInChildren<Image>(true);
            foreach (Image item in transArr14)
            {
                var path = AssetDatabase.GetAssetPath(item.sprite.GetInstanceID());
                if (string.IsNullOrEmpty(path)) continue;
                if (!path.Contains("ResourcesOut")) continue;
                if (!Directory.Exists("OpenWindowImages/" + fileName))
                    Directory.CreateDirectory("OpenWindowImages/" + fileName);
                if (!File.Exists("OpenWindowImages/" + fileName + "/" + item.sprite.name + ".png"))
                    File.Copy(path, "OpenWindowImages/" + fileName + "/" + item.sprite.name + ".png");
            }
        }
    }
}
Assets/Editor/Tool/ExportPrefabsIMG.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c8cbde03156fbed459df0b237626f844
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant: