(转载)Unity3D研究院编辑器之脚本打开SpritePacker窗口 自动打开想要的图集

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

 

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;

                }

            }

        }

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值