正常情况下需要选择 Windows->SpritePacker 但是默认会选择第一个图集。如下图所示,这就很不爽了,因为我做了图集管理工具,我想在Insperctor窗口中点击某个按钮,自动打开SpritePacker并且选择我设置的图集怎么办?
SpritePacker窗口没有提供代码访问接口,那么我们可以使用强大的反射功能。我自己反编译一下Unity的Editor代码,然后找到图集的窗口类。然后看看它的实现方法,然后就有了如下的代码了。
using UnityEditor; using System.Reflection; using UnityEditor.Sprites; publicclassMyEditor:Editor{ [MenuItem("GameObject/SearchAtlas",false,0)] staticvoidStartInitializeOnLoadMethod1() { //需要Sprite Packer界面定位的图集名称 stringspriteName="atlas_name2"; //设置使用采取图集的方式 EditorSettings.spritePackerMode=SpritePackerMode.AlwaysOn; //打包图集 Packer.RebuildAtlasCacheIfNeeded(EditorUserBuildSettings.activeBuildTarget,true); //打开SpritePack窗口 EditorApplication.ExecuteMenuItem("Window/Sprite Packer"); varwindow=EditorWindow.focusedWindow; //反射遍历所有图集 vartype=typeof(EditorWindow).Assembly.GetType("UnityEditor.Sprites.PackerWindow"); FieldInfoinfoNames=type.GetField("m_AtlasNames",BindingFlags.NonPublic|BindingFlags.Instance); string[]infoNamesArray=(string[])infoNames.GetValue(window); if(infoNamesArray!=null) { for(inti=0;i<infoNamesArray.Length;i++) { if(infoNamesArray[i]==spriteName) { //找到后设置索引 FieldInfoinfo=type.GetField("m_SelectedAtlas",BindingFlags.NonPublic|BindingFlags.Instance); info.SetValue(window,i); break; } } } } }
OK.如下图所示,脚本打开SpritePacker窗口,并且定位到我需要的图集上。
Unity版本5.2.2