{"id":1289,"date":"2017-09-09T13:24:12","date_gmt":"2017-09-09T05:24:12","guid":{"rendered":"http:\/\/39.100.100.179\/?p=1289"},"modified":"2017-09-09T13:25:01","modified_gmt":"2017-09-09T05:25:01","slug":"1289","status":"publish","type":"post","link":"http:\/\/www.u3d8.com\/?p=1289","title":{"rendered":"\u4f7f\u7528\u7f16\u8f91\u5668\u67e5\u8be2NGUI\u56fe\u96c6Atlas\u5f15\u7528"},"content":{"rendered":"<p>\u4eca\u5929\u7ed9\u5927\u5bb6\u7528Unity\u7f16\u8f91\u5668\u5b9e\u73b0\u4e00\u4e2a\u67e5\u8be2NGUI\u56fe\u96c6Atlas\u5728\u8d44\u6e90\u4e2d\u7684\u5f15\u7528\u5173\u7cfb<\/p>\n<p>\u5de5\u5177\u56fe\uff1a<\/p>\n<p><a href=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2017\/09\/QQ\u622a\u56fe20170909131449.png\" data-lightbox=\"image_lg\"><img title=\"\u4f7f\u7528\u7f16\u8f91\u5668\u67e5\u8be2NGUI\u56fe\u96c6Atlas\u5f15\u7528 - \u7b2c1\u5f20  | u3d8\u6280\u672f\u5206\u4eab\" alt=\"\u4f7f\u7528\u7f16\u8f91\u5668\u67e5\u8be2NGUI\u56fe\u96c6Atlas\u5f15\u7528 - \u7b2c1\u5f20  | u3d8\u6280\u672f\u5206\u4eab\"  loading=\"lazy\" class=\"aligncenter size-full wp-image-1290\"  data-src=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2017\/09\/QQ\u622a\u56fe20170909131449.png\" width=\"508\" height=\"703\" srcset=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2017\/09\/QQ\u622a\u56fe20170909131449.png 508w, http:\/\/www.u3d8.com\/wp-content\/uploads\/2017\/09\/QQ\u622a\u56fe20170909131449-217x300.png 217w\" sizes=\"(max-width: 508px) 100vw, 508px\" \/><\/a><\/p>\n<p>\u4f7f\u7528\u65b9\u6cd5\uff1a<\/p>\n<p>\u4e00\u3001\u5148\u4fee\u6539\u4e0b\u9762\u811a\u672c14\u884c\uff0c\u6307\u5b9a\u597d\u56fe\u96c6\u6240\u5728\u7684\u76ee\u5f55<\/p>\n<p>\u4e8c\u3001\u70b9\u51fb\u201cTools\/\u67e5\u627eNGUI\u56fe\u96c6\u5f15\u7528\u201d\uff0c\u6253\u5f00\u9762\u677f<\/p>\n<p>\u4e09\u3001\u70b9\u51fb\u9009\u62e9\u56fe\u96c6\uff0c\u6216\u8005\u5c06\u6307\u5b9a\u56fe\u96c6\u62d6\u5728UIAtlas\u4f4d\u7f6e<\/p>\n<p>\u56db\u3001\u5728\u201cHierarchy\u201d\u6216\u201cProject\u201d\u9762\u677f\u9009\u62e9\u8981\u67e5\u627e\u7684\u76ee\u6807\u9884\u8bbe\u4f53\uff08\u53ef\u4ee5\u591a\u9009\uff09<\/p>\n<p>\u4e94\u3001\u70b9\u51fb\u67e5\u627e\u5f15\u7528\uff0c\u5c31\u4f1a\u663e\u793a\u51fa\u9009\u62e9\u7684\u9884\u8bbe\u4f53\u6709\u54ea\u4e9bUI\u4f7f\u7528\u4e86\u9009\u62e9\u7684\u56fe\u96c6\u4e86<\/p>\n<p>\u4e0a\u811a\u672c\uff1a<\/p>\n<pre class=\"lang:c# decode:true \">using System.Collections.Generic;\r\nusing System.Linq;\r\nusing UnityEditor;\r\nusing UnityEngine;\r\n\r\npublic class FindAtlasUseUtil : EditorWindow\r\n{\r\n    UIAtlas atlas;\r\n    Transform[] selectTrans;\r\n    List&lt;UISprite&gt; spriteList;\r\n    Vector2 scrollPosition;\r\n    bool selectedAtlas = false;\r\n    List&lt;UIAtlas&gt; atlasList;\r\n    string[] atlasPath = new string[] { \"Assets\/Arts\/Atlas\", \"Assets\/Resources\/Atlas\" };    \/\/ TODO \u6307\u5b9a\u9879\u76ee\u91cc\u56fe\u96c6\u7684\u7236\u8282\u70b9 \u9700\u4fee\u6539\r\n\r\n    static FindAtlasUseUtil window;\r\n\r\n    [MenuItem(\"Tools\/\u67e5\u627eNGUI\u56fe\u96c6\u5f15\u7528\")]\r\n    static void CreateWindow()\r\n    {\r\n        window = (FindAtlasUseUtil)EditorWindow.GetWindow(typeof(FindAtlasUseUtil), false, \"\u67e5\u627e\u56fe\u96c6\u5f15\u7528\");\r\n        window.Show();\r\n    }\r\n\r\n    private void OnEnable()\r\n    {\r\n        spriteList = new List&lt;UISprite&gt;();\r\n    }\r\n\r\n    private void OnGUI()\r\n    {\r\n        EditorGUILayout.Space();\r\n        EditorGUILayout.Space();\r\n        atlas = EditorGUILayout.ObjectField(\"\u9700\u8981\u67e5\u8be2\u7684\u56fe\u96c6\uff1a\", atlas, typeof(UIAtlas)) as UIAtlas;\r\n\r\n        if (GUILayout.Button(\"\u9009\u62e9\u56fe\u96c6\"))\r\n        {\r\n            ChooseAtlas();\r\n        }\r\n\r\n        EditorGUILayout.Space();\r\n        EditorGUILayout.Space();\r\n\r\n        GUILayout.Label(\"\u53ef\u591a\u9009\u201cHierarchy\u201d\u3001\u201cProject\u201d\u9762\u677f\u7684\u9884\u8bbe\u4f53\");\r\n        if (GUILayout.Button(\"\u67e5\u627e\u5f15\u7528\"))\r\n        {\r\n            FindUse();\r\n        }\r\n\r\n        EditorGUILayout.Space();\r\n        EditorGUILayout.Space();\r\n\r\n        if (selectedAtlas)\r\n        {\r\n            ShowChooseAtlas();\r\n        }\r\n\r\n        if (spriteList.Count &gt; 0 &amp;&amp; atlas != null &amp;&amp; !selectedAtlas)\r\n        {\r\n            ShowFindUse();\r\n        }       \r\n    }\r\n\r\n    void ChooseAtlas()\r\n    {\r\n        selectedAtlas = true;\r\n        if (atlasList == null)\r\n        {\r\n            atlasList = new List&lt;UIAtlas&gt;();\r\n            \/\/ \u7b2c\u4e8c\u4e2a\u53c2\u6570\u4e3a\u56fe\u96c6\u7684\u76ee\u5f55\u4f4d\u7f6e\u6570\u7ec4\uff0c\u53ef\u4ee5\u6307\u5b9a\u9879\u76ee\u91cc\u5b58\u653e\u56fe\u96c6\u7684\u7236\u8282\u70b9\u3002\u5207\u8bb0\u4e0d\u8981\u5728Assets\u8282\u70b9\u4e0b\u67e5\u627e\uff0c\u8fd9\u6837\u4f1a\u904d\u5386\u6240\u6709\u7269\u4f53\uff0c\u4f1a\u5f88\u5361\u7684~~\r\n            string[] guids = AssetDatabase.FindAssets(\"t:GameObject\", atlasPath);   \r\n            List&lt;string&gt; paths = new List&lt;string&gt;();\r\n            guids.ToList().ForEach(m =&gt; paths.Add(AssetDatabase.GUIDToAssetPath(m)));\r\n            paths.ForEach(p =&gt; atlasList.Add(AssetDatabase.LoadAssetAtPath(p, typeof(UIAtlas)) as UIAtlas));\r\n            \/\/ \u79fb\u9664Null\u503c\r\n            for (int i = 0; i &lt; atlasList.Count; i++)\r\n            {\r\n                if (i &lt; atlasList.Count &amp;&amp; atlasList[i] == null)\r\n                {\r\n                    atlasList.Remove(atlasList[i]);\r\n                    i--;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    void FindUse()\r\n    {\r\n        selectTrans = Selection.GetTransforms(SelectionMode.TopLevel);\r\n        spriteList = new List&lt;UISprite&gt;();\r\n        for (int i = 0; i &lt; selectTrans.Length; i++)\r\n        {\r\n            UISprite[] sprites = selectTrans[i].GetComponentsInChildren&lt;UISprite&gt;(true);\r\n            for (int j = 0; j &lt; sprites.Length; j++)\r\n            {\r\n                if (sprites[j] != null &amp;&amp; sprites[j].atlas == atlas)\r\n                {\r\n                    spriteList.Add(sprites[j]);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    void ShowChooseAtlas()\r\n    {\r\n        scrollPosition = GUI.BeginScrollView(new Rect(0, 150, Screen.width, 500), scrollPosition, new Rect(0, 150, Screen.width, atlasList.Count * 20));\r\n        for (int i = 0; i &lt; atlasList.Count; i++)\r\n        {\r\n            atlasList[i] = EditorGUI.ObjectField(new Rect(50, 150 + i * 20, Screen.width, 20), name, atlasList[i], typeof(UIAtlas)) as UIAtlas;\r\n            if (GUI.Button(new Rect(5, 150 + i * 20, 40, 20), \"\u9009\u62e9\"))\r\n            {\r\n                atlas = atlasList[i];\r\n                selectedAtlas = false;\r\n            }\r\n        }\r\n        GUI.EndScrollView();\r\n    }\r\n\r\n    void ShowFindUse()\r\n    {\r\n        scrollPosition = GUI.BeginScrollView(new Rect(0, 150, Screen.width, 500), scrollPosition, new Rect(0, 150, Screen.width, spriteList.Count * 20));\r\n        for (int i = 0; i &lt; spriteList.Count; i++)\r\n        {\r\n            string name = spriteList[i].atlas != null ? spriteList[i].atlas.name : \"\u7a7a\u56fe\u96c6\";\r\n            name += \" \" + spriteList[i].spriteName;\r\n            spriteList[i] = EditorGUI.ObjectField(new Rect(0, 150 + i * 20, Screen.width, 20), name, spriteList[i], typeof(UISprite)) as UISprite;\r\n\r\n        }\r\n        GUI.EndScrollView();\r\n    }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4eca\u5929\u7ed9\u5927\u5bb6\u7528Unity\u7f16\u8f91\u5668\u5b9e\u73b0\u4e00\u4e2a\u67e5\u8be2NGUI\u56fe\u96c6Atlas\u5728\u8d44\u6e90\u4e2d\u7684\u5f15\u7528\u5173\u7cfb &hellip; <a href=\"http:\/\/www.u3d8.com\/?p=1289\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[297],"tags":[302,300,301],"_links":{"self":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/1289"}],"collection":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1289"}],"version-history":[{"count":2,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/1289\/revisions"}],"predecessor-version":[{"id":1292,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/1289\/revisions\/1292"}],"wp:attachment":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1289"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}