{"id":2821,"date":"2020-10-28T21:56:09","date_gmt":"2020-10-28T13:56:09","guid":{"rendered":"http:\/\/blog.coolcoding.cn\/?p=2821"},"modified":"2020-10-28T21:58:13","modified_gmt":"2020-10-28T13:58:13","slug":"unity%e5%8f%98%e4%bd%93%e6%94%b6%e9%9b%86%e5%99%a8%e5%bc%80%e5%8f%91","status":"publish","type":"post","link":"https:\/\/blog.coolcoding.cn\/?p=2821","title":{"rendered":"[Unity]\u53d8\u4f53\u6536\u96c6\u5668\u5f00\u53d1"},"content":{"rendered":"<p>\u5199\u4e00\u4e2a\u811a\u672c\uff0c\u628aPrefab\u548cMaterial\u5168\u52a0\u8f7d\u4e00\u904d\uff0c\u4ee3\u7801\u5982\u4e0b\u3002<\/p>\n<pre><code class=\"line-numbers\">#if UNITY_EDITOR\n\nusing System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\nusing UnityEditor;\n\n\/\/ \u53d8\u4f53\u6536\u96c6\u5668\npublic class ShaderVarCollect : MonoBehaviour\n{\n    const int TaskNum = 20;\n\n    void Start()\n    {\n        StartCoroutine(UpdateTask());\n    }\n\n    IEnumerator UpdateTask()\n    {\n        string[] prefabAssets = System.IO.Directory.GetFiles(\"Assets\/\", \"*.prefab\", System.IO.SearchOption.AllDirectories);\n\n        yield return null;\n\n        List&lt;Object&gt; objs = new List&lt;Object&gt;();\n        int sec = Mathf.CeilToInt(prefabAssets.Length \/ TaskNum);\n        for(int secIndex = 0; secIndex &lt; sec; ++secIndex)\n        {\n            foreach(var obj in objs)\n            {\n                Destroy(obj);\n            }\n            objs.Clear();\n\n            var baseIndex = secIndex * TaskNum;\n            for(int i=0; i&lt;TaskNum; ++i)\n            {\n                var currIndex = baseIndex + i;\n                if (currIndex &lt; prefabAssets.Length)\n                {\n                    var tobj = AssetDatabase.LoadAssetAtPath(prefabAssets[currIndex], typeof(UnityEngine.Object));\n                    if (tobj != null)\n                    {\n                        objs.Add( Instantiate(tobj) );\n                    }\n                }\n            }\n\n            yield return null;\n            yield return null;\n        }\n\n        foreach(var obj in objs)\n        {\n            Destroy(obj);\n        }\n        objs.Clear();\n\n\n        string[] matList = System.IO.Directory.GetFiles(\"Assets\/\", \"*.mat\", System.IO.SearchOption.AllDirectories);\n\n        yield return null;\n\n        List&lt;MeshRenderer&gt; spheres = new List&lt;MeshRenderer&gt;();\n\n        for(int i=0; i&lt;TaskNum; ++i)\n        {\n            spheres.Add( GameObject.CreatePrimitive(PrimitiveType.Sphere).GetComponent&lt;MeshRenderer&gt;() );\n        }\n\n        sec = Mathf.CeilToInt(matList.Length \/ TaskNum);\n        for(int secIndex = 0; secIndex &lt; sec; ++secIndex)\n        {\n            var baseIndex = secIndex * TaskNum;\n            for(int i=0; i&lt;TaskNum; ++i)\n            {\n                var currIndex = baseIndex + i;\n                if (currIndex &lt; matList.Length)\n                {\n                    var tobj = AssetDatabase.LoadAssetAtPath(matList[currIndex], typeof(UnityEngine.Material)) as UnityEngine.Material;\n                    if (tobj != null)\n                    {\n                        spheres[i].sharedMaterial = tobj;\n                    }\n                }\n            }\n\n            yield return null;\n            yield return null;\n        }\n    }\n}\n\n#endif\n\n<\/code><\/pre>\n<p>\u641e\u4e2a\u7a7ascene\uff0c\u6302\u4e0a\u811a\u672c\u8dd1\u4e00\u542f\u904d\uff1b<br \/>\n\u7136\u540e\u5728Project Settings \/ Graphics \u4e2d\uff0c\u62c9\u5230\u6700\u540e\u9762\uff0c<br \/>\n\u5728Shader Preloading \u9875\uff0c\u70b9\u201cSave to asset&#8230;\u201d<br \/>\n\u4fdd\u5b58\u53d8\u4f53\u6536\u96c6\u5668\u5230Shader\u7684AB\u5305\u4e2d\u5373\u53ef\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5199\u4e00\u4e2a\u811a\u672c\uff0c\u628aPrefab\u548cMaterial\u5168\u52a0\u8f7d\u4e00\u904d\uff0c\u4ee3\u7801\u5982\u4e0b\u3002 #if UNITY_EDITOR usin [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2702,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/2821"}],"collection":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2821"}],"version-history":[{"count":3,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/2821\/revisions"}],"predecessor-version":[{"id":2824,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/2821\/revisions\/2824"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/media\/2702"}],"wp:attachment":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2821"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2821"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2821"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}