开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:1627

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 1144|回复: 8

[成都大红花] Unity3D游戏开发之“编辑器功能:寻找NGUI图集被引用关系(包括预制、代码、配档)”

[复制链接]  [移动端链接]
排名
2495
昨日变化
8

48

主题

152

帖子

1530

积分

Rank: 9Rank: 9Rank: 9

UID
135388
好友
12
蛮牛币
2650
威望
0
注册时间
2016-1-22
在线时间
270 小时
最后登录
2017-3-27

专栏作家

发表于 2016-10-20 10:30:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 成都大红花 于 2016-12-17 15:29 编辑

因为项目中换了新的UI,所以项目中老资源和新资源同时存在,但是我们需要把老资源删掉,所以最近写了一些工具来辅助做这些事情。进入正题,如题所示,其实在unity中我们很容易能找到某个资源的依赖关系直接用EditorUtility.CollectDependencies即可,但是怎么找某个资源被哪些资源引用过呢。
下面我们会找出prefab、代码、配档中是否有引用过此图集。

代码如下:
[C#] 纯文本查看 复制代码
     [MenuItem("Assets/Find Refrence In Prefab/Find Atlas Refrence", false, -103)]
     static void FindAtlasRefrenceInPrefab() {
         List<RefrenceInfo> atlasRefrences = new List<RefrenceInfo>();

         List<string> allAssetPath = new List<string>(AssetDatabase.GetAllAssetPaths());
         List<UnityEngine.Object> prefabs = new List<UnityEngine.Object>();
         for (int i = allAssetPath.Count - 1; i > 0; i--) {
             string path = allAssetPath[i];
             if (!path.EndsWith(".prefab"))
                 allAssetPath.Remove(path);
         }
         for (int i = 0; i < allAssetPath.Count; i++) {
             EditorUtility.DisplayProgressBar("Find Texrure Refrence In Prefab",
                    "Searching prefabs", (float)i / (float)allAssetPath.Count);
             UnityEngine.Object obj = AssetDatabase.LoadAssetAtPath(allAssetPath[i], typeof(UnityEngine.Object));
             prefabs.Add(obj);
         }
         EditorUtility.ClearProgressBar();

         UnityEngine.Object[] selects = Selection.objects;
         for (int j = 0; j < selects.Length; j++) {
             RefrenceInfo refrenceInfo = new RefrenceInfo();
             EditorUtility.DisplayProgressBar(string.Format("Find Texrure Refrence In Prefab[{0}/{1}]", j, selects.Length),
                    "Searching prefabs", (float)j / (float)selects.Length);

             UnityEngine.Object atlas = selects[j];
             if (atlas == null)
                 return;

             int prefabRefrenceCount = 0;
             StringBuilder refrencePaths = new StringBuilder();
             for (int i = 0; i < prefabs.Count; i++) {
                 GameObject prefab = prefabs[i] as GameObject;
                 if (prefab == null)
                     continue;
                 List<UISprite> sprites = new List<UISprite>(prefab.transform.GetComponentsInChildren<UISprite>(true));
                 sprites.Sort(delegate(UISprite s1, UISprite s2) {
                     int s = s1.spriteName.CompareTo(s2.spriteName);
                     if(s != 0)
                         return s;
                     return 0;
                 });

                 for (int k = 0; k < sprites.Count; k++) {
                     if (sprites[k].atlas == null)
                         continue;
                     if (sprites[k].atlas.name == atlas.name && 
                         sprites[k].atlas.GetSprite(sprites[k].spriteName) != null) {
                         prefabRefrenceCount++;
                         string collectPath = string.Format("--[{2}]AssetPath:{0}   TextureName:{1}  SpriteName:{3}"
                             , AssetDatabase.GetAssetPath(prefabs[i]), CClientCommon.GetChildPath(prefab.transform, sprites[k].transform), prefabRefrenceCount, sprites[k].spriteName);
                         refrencePaths.AppendLine(collectPath);
                     }
                 }
             }

             List<string> componentRefrences = GetRefrenceComponent(atlas.name);
             StringBuilder temp = new StringBuilder();
             for (int i = 0; i < componentRefrences.Count; i++) {
                 temp.AppendLine(componentRefrences[i]);
             }
             refrencePaths.AppendLine(temp.ToString());

             string content = string.Format("Atlas:{0}  PrefabRefrence:{1}  ClassRefrence:{2}  Total:{3} \n{4}"
                    , atlas.name, prefabRefrenceCount, componentRefrences.Count, prefabRefrenceCount + componentRefrences.Count, refrencePaths.ToString());

             refrenceInfo.prefabCount = prefabRefrenceCount;
             refrenceInfo.classCount = componentRefrences.Count;
             refrenceInfo.obj = atlas;
             refrenceInfo.content = content;
             EditorUtility.ClearProgressBar();

             atlasRefrences.Add(refrenceInfo);
         }

         for (int i = 0; i < atlasRefrences.Count; i++) {
             Debug.Log(atlasRefrences[i].ToString(), atlasRefrences[i].obj);
         }
     }

如果觉得我的帖子对你有帮助:请投“成都大红花”一票  传送门:http://www.manew.com/tools/expert

如果有什么问题请加群交流:
技术交流群:153091222
成都unity3d技术圈:422809511


回复

使用道具 举报

5熟悉之中
811/1000
排名
2089
昨日变化
12

0

主题

83

帖子

811

积分

Rank: 5Rank: 5

UID
56303
好友
0
蛮牛币
1929
威望
0
注册时间
2014-11-19
在线时间
266 小时
最后登录
2017-3-27
发表于 2016-10-21 14:19:03 | 显示全部楼层
不错哦,可以学习一下

回复 支持 反对

使用道具 举报

5熟悉之中
788/1000
排名
2868
昨日变化
11

3

主题

234

帖子

788

积分

Rank: 5Rank: 5

UID
68430
好友
0
蛮牛币
3708
威望
0
注册时间
2015-1-14
在线时间
211 小时
最后登录
2017-3-27
发表于 2016-10-21 21:35:59 | 显示全部楼层
不错不错~~~

回复

使用道具 举报

7日久生情
1586/5000
排名
666
昨日变化
3

4

主题

158

帖子

1586

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
34678
好友
1
蛮牛币
3497
威望
0
注册时间
2014-7-16
在线时间
460 小时
最后登录
2017-3-27
发表于 2016-10-22 10:14:21 | 显示全部楼层
CClientCommon.GetChildPath( Transform tr1 , Transform tr2)   , GetRefrenceComponent(string str) , 这两个方法发一下呗

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1404/1500
排名
946
昨日变化
2

0

主题

381

帖子

1404

积分

Rank: 6Rank: 6Rank: 6

UID
111260
好友
0
蛮牛币
4496
威望
0
注册时间
2015-6-30
在线时间
221 小时
最后登录
2017-3-27
发表于 2016-10-22 11:31:42 | 显示全部楼层

不错哦,可以学习一下

回复 支持 反对

使用道具 举报

2初来乍到
114/150
排名
11850
昨日变化
3

1

主题

16

帖子

114

积分

Rank: 2Rank: 2

UID
147783
好友
0
蛮牛币
80
威望
0
注册时间
2016-5-6
在线时间
55 小时
最后登录
2017-3-27
发表于 2016-10-22 15:19:27 | 显示全部楼层
有点看不懂诶~~~~ 里面的有些类型是编译不过去的,是因为命名空间没有引用吗?

回复 支持 反对

使用道具 举报

4四处流浪
474/500
排名
4816
昨日变化
7

4

主题

147

帖子

474

积分

Rank: 4

UID
175029
好友
5
蛮牛币
964
威望
0
注册时间
2016-10-12
在线时间
131 小时
最后登录
2017-3-14
发表于 2016-10-24 08:41:18 | 显示全部楼层
学习了,不错

回复

使用道具 举报

5熟悉之中
632/1000
排名
3779
昨日变化
26

0

主题

210

帖子

632

积分

Rank: 5Rank: 5

UID
159033
好友
0
蛮牛币
490
威望
0
注册时间
2016-7-29
在线时间
166 小时
最后登录
2017-3-27
发表于 2016-11-11 11:48:14 | 显示全部楼层
好好学习
[发帖际遇]: cakycookie 乐于助人,奖励 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

排名
44798
昨日变化
55

0

主题

4

帖子

6

积分

Rank: 1

UID
185984
好友
0
蛮牛币
0
威望
0
注册时间
2016-11-22
在线时间
0 小时
最后登录
2016-11-22
发表于 2016-11-22 20:58:12 | 显示全部楼层
學到很多   謝謝分享阿哈哈哈哈!!!!!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表