优质中文开源软件代码项目资源技术共享平台
传播开源的理念,推广开源项目
风雨总会过去,阳光定会到来,河南加油!

网站首页 游戏开发 正文

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

longtao100 2021-09-06 游戏开发 25 ℃ 0 评论

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

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
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窗口,并且定位到我需要的图集上。

 

Unity版本5.2.2

 

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

请填写验证码
开源分类
最近发表
开源网标签
开源网归档