Unity3D研究院编辑器之脚本打开SpritePacker窗口(十七)

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

Unity3D研究院编辑器之脚本打开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窗口,并且定位到我需要的图集上。

Unity3D研究院编辑器之脚本打开SpritePacker窗口(十七)

Unity版本5.2.2

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Unity3D研究院编辑器之脚本打开SpritePacker窗口(十七)

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址