美文网首页Unity编辑器开发分享
[转]脚本打开SpritePacker窗口

[转]脚本打开SpritePacker窗口

作者: 小小小小小丶敏 | 来源:发表于2017-11-26 19:34 被阅读12次

    正常情况下需要选择 Windows->SpritePacker 但是默认会选择第一个图集。如下图所示,这就很不爽了,因为我做了图集管理工具,我想在Insperctor窗口中点击某个按钮,自动打开SpritePacker并且选择我设置的图集怎么办?

    Unity3D研究院编辑器之脚本打开SpritePacker窗口(十七) - 雨松MOMO程序研究院 - 1

    SpritePacker窗口没有提供代码访问接口,那么我们可以使用强大的反射功能。我自己反编译一下Unity的Editor代码,然后找到图集的窗口类。然后看看它的实现方法,然后就有了如下的代码了。

    using UnityEditor;
    using System.Reflection;
    using UnityEditor.Sprites;
     
    public class MyEditor : Editor {
     
     
        [MenuItem("GameObject/SearchAtlas",false,0)]
        static void StartInitializeOnLoadMethod1()
        {
            //需要Sprite Packer界面定位的图集名称
            string spriteName = "atlas_name2";
            //设置使用采取图集的方式
            EditorSettings.spritePackerMode = SpritePackerMode.AlwaysOn;
            //打包图集
            Packer.RebuildAtlasCacheIfNeeded(EditorUserBuildSettings.activeBuildTarget, true);
            //打开SpritePack窗口
            EditorApplication.ExecuteMenuItem("Window/Sprite Packer");
     
            //反射遍历所有图集
            var type = typeof(EditorWindow).Assembly.GetType("UnityEditor.Sprites.PackerWindow");
            var window = EditorWindow.GetWindow(type);
            FieldInfo infoNames = type.GetField("m_AtlasNames", BindingFlags.NonPublic | BindingFlags.Instance);
            string[] infoNamesArray = (string[])infoNames.GetValue(window);
     
            if(infoNamesArray != null)
            {
                for (int i = 0; i < infoNamesArray.Length; i++)
                {
                    if (infoNamesArray[i] == spriteName)
                    {
                        //找到后设置索引
                        FieldInfo info = type.GetField("m_SelectedAtlas", BindingFlags.NonPublic | BindingFlags.Instance);
                        info.SetValue(window, i);
                        break;
                    }
                }
            }
        }
    }
    

    OK.如下图所示,脚本打开SpritePacker窗口,并且定位到我需要的图集上。


    image.png

    文章转自http://www.xuanyusong.com/archives/3768

    相关文章

      网友评论

        本文标题:[转]脚本打开SpritePacker窗口

        本文链接:https://www.haomeiwen.com/subject/xcklbxtx.html