美文网首页
Unity 代码修改场景上的prefab后保存

Unity 代码修改场景上的prefab后保存

作者: jojo911 | 来源:发表于2018-10-08 18:23 被阅读0次

    Talk is cheap, show me the code

    多说无益,上代码


    [MenuItem("[Tools]/场景/一键替换导航网格面")]

        static void TransNav()

        {

            GameObject obj = GameObject.Find("NavMeshObj");

            if(obj && obj.transform.childCount > 0)

            {

                Object prefab = PrefabUtility.GetPrefabParent(obj);

                if(prefab)

                {

                    string str = AssetDatabase.GetAssetPath(prefab);

                    string path = str.Replace(".prefab", ".obj");

                    GameObject tmp = AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)) as GameObject;

                    if(tmp)

                    {

                        GameObject instTmp = Instantiate(tmp, obj.transform);

                        Transform[] instChilds = instTmp.GetComponentsInChildren<Transform>();

                        for (int i = 0; i < instChilds.Length; i++)

                        {

                            MeshRenderer mr = instChilds[i].GetComponent<MeshRenderer>();

                            if (mr)

                            {

                                mr.enabled = false;

                                instChilds[i].gameObject.AddComponent<MeshCollider>();

                                instChilds[i].gameObject.layer = 10;

                            }

                        }

                        GameObject.DestroyImmediate(obj.transform.GetChild(0).gameObject);

                        PrefabUtility.ReplacePrefab(obj, prefab, ReplacePrefabOptions.ConnectToPrefab);

                        AssetDatabase.SaveAssets();

                    }

                }

            }

        }

    相关文章

      网友评论

          本文标题:Unity 代码修改场景上的prefab后保存

          本文链接:https://www.haomeiwen.com/subject/owbjaftx.html