找回密码
 注册帐号

扫一扫,访问微社区

脚本 有没有大佬知道网格合并完格树叶为啥没了

2
回复
357
查看
[ 复制链接 ]
4四处流浪
447/500
排名
6484
昨日变化

14

主题

67

帖子

447

积分

Rank: 4

UID
265611
好友
1
蛮牛币
188
威望
0
注册时间
2018-1-21
在线时间
158 小时
最后登录
2019-7-23
2019-5-10 14:50:15 显示全部楼层 阅读模式
20蛮牛币
void DoCombineMesh()
    {
        MeshFilter[] mfCHildren = GetComponentsInChildren<MeshFilter>();
        CombineInstance[] combine = new CombineInstance[mfCHildren.Length];

        MeshRenderer[] mrChildren = GetComponentsInChildren<MeshRenderer>();
        List<Material> materials = new List<Material>();
            //Material[] materials = new Material();

        MeshRenderer mrSelf = gameObject.AddComponent<MeshRenderer>();
        MeshFilter mfSelf = gameObject.AddComponent<MeshFilter>();

        //Texture2D[] textures = new Texture2D[mrChildren.Length];
        List<Texture2D> textures = new List<Texture2D>();

        for (int i = 0; i < mrChildren.Length; i++)
        {
            if (mrChildren[i].transform == transform)
            {
                continue;
            }


            foreach (var item in mrChildren[i].sharedMaterials)
            {
                materials.Add(item);
                Texture2D tx = item.GetTexture("_MainTex") as Texture2D;
                Texture2D tx2D = new Texture2D(tx.width, tx.height, TextureFormat.ARGB32, false);
                tx2D.SetPixels(tx.GetPixels(0, 0, tx.width, tx.height));
                tx2D.Apply();
                textures.Add(tx2D);
            }




            //materials[i] = mrChildren[i].sharedMaterial;
            //Texture2D tx = materials[i].GetTexture("_MainTex") as Texture2D;

            //Texture2D tx2D = new Texture2D(tx.width, tx.height, TextureFormat.ARGB32, false);
            //tx2D.SetPixels(tx.GetPixels(0, 0, tx.width, tx.height));
            //tx2D.Apply();
            //textures[i] = tx2D;
        }
        Material materialNew = new Material(materials[0].shader);//用同一个shader创建新的材质
        materialNew.CopyPropertiesFromMaterial(materials[0]);//拷贝材质属性
        mrSelf.sharedMaterial = materialNew;//赋予给新的MeshRenderer

        Texture2D texture = new Texture2D(1024, 1024);//新创一个贴图来合并所有小图
        materialNew.SetTexture("_MainTex", texture);//新材质使用这个新贴图
        Rect[] rects = texture.PackTextures(textures.ToArray(), 0, 1024);//将多个贴图合并到新创建的贴图上

        for (int i = 0; i < mfCHildren.Length; i++)
        {
            if (mfCHildren[i].transform == transform)
            {
                continue;
            }
            Rect rect = rects[i];//拿出对应的贴图的rect
            Mesh meshCombine = mfCHildren[i].mesh;//贴图对应的mesh
            Vector2[] uvs = new Vector2[meshCombine.uv.Length];//mesh的uv数组
            for (int j = 0; j < uvs.Length; j++)
            {
                uvs[j].x = rect.x + meshCombine.uv[j].x * rect.width;
                uvs[j].y = rect.y + meshCombine.uv[j].y * rect.height;
            }
            meshCombine.uv = uvs;//这样就可以在合并后的贴图找到属于自己的小图
            combine[i].mesh = meshCombine;//赋予 “合并结构体”CombineInstance
            //combine[i].transform = mfCHildren[i].transform.localToWorldMatrix;
            combine[i].transform = transform.worldToLocalMatrix * mfCHildren[i].transform.localToWorldMatrix;
            //mfCHildren[i].gameObject.SetActive(false);
            mfCHildren[i].GetComponent<MeshRenderer>().enabled = false;

        }

        Mesh newMesh = new Mesh();
        newMesh.CombineMeshes(combine, true, true);//合并网格
        mfSelf.mesh = newMesh;
    }
}

QQ图片20190510144552.png
QQ图片20190510144628.png
QQ图片20190510144637.png
回复

使用道具 举报

排名
25424
昨日变化

6

主题

32

帖子

93

积分

Rank: 2Rank: 2

UID
232351
好友
0
蛮牛币
279
威望
0
注册时间
2017-7-15
在线时间
37 小时
最后登录
2019-5-13
2019-5-10 14:50:16 显示全部楼层
using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;
using System.Linq;
using System.Collections.Generic;
using System.IO;
using DigitalOpus.MB.Core;
using System;

public class CombineTool : EditorWindow
{
    private const int GRIDSIDE = 15;
    private const string PATH = "Assets/CombinedScenes/";
    private const string BLOCK_LAYER_NAME = "block";
    private const string DETAIL_LAYER_NAME = "detail";
    private const string CAMERA_LAYER_NAME = "camera";
    private static int CAMERA_LAYER = LayerMask.NameToLayer(CAMERA_LAYER_NAME);
    private const string SCENE_DIFFUSE_SHADER = "scenes/Diffuse";
    private const string SCENE_CUTOUT_DIFFUSE_SHADER = "scenes/Cutout/Diffuse";
    #region ProgressBar
    private static new string title = "";
    private static string PBTitle
    {
        set
        {
            title = value;
            EditorUtility.DisplayProgressBar(title, content + "   " + state, process);
        }
        get { return title; }
    }
    private static string content = "";
    private static string PBContent
    {
        get { return content; }
        set
        {
            content = value;
            EditorUtility.DisplayProgressBar(title, content + "   " + state, process);
        }
    }
    private static string state = "";
    private static string PBState
    {
        get { return state; }
        set
        {
            state = value;
            EditorUtility.DisplayProgressBar(title, content + "   " + state, process);
        }
    }
    private static float process = 0;
    private static float PBProcess
    {
        get { return process; }
        set
        {
            process = value;
            EditorUtility.DisplayProgressBar(title, content + "   " + state, process);
        }
    }
    #endregion
    #region 合并场景
    [MenuItem("Tools/合并烘焙导出场景")]
    public static void ShowWindow()
    {
        CombineTool ct=   GetWindow<CombineTool>();
        ct.sceneNames = AssetDatabase.GetAllAssetPaths().Where(s => s.EndsWith(".unity")).ToArray();
        ct.isCombineArray = ct.sceneNames.Select(s => false).ToArray();
        ct.isLittleSceneArray = ct.sceneNames.Select(s => false).ToArray();
        ct.Show();
    }

    private string[] sceneNames;
    private string[] SceneNames
    {
        get
        {
            if (sceneNames==null) sceneNames= AssetDatabase.GetAllAssetPaths().Where(s => s.EndsWith(".unity")).ToArray();
            return sceneNames;
        }
        set
        {
            sceneNames = value;
        }
    }
    private bool[] isCombineArray, isLittleSceneArray,isBakeArray,isSetStaticArray;
    private bool[] IsCombineArray
    {
        get
        {
            if (isCombineArray == null) isCombineArray = SceneNames.Select(s=>false).ToArray();
            return isCombineArray;
        }
        set
        {
            isCombineArray = value;
        }
    }
    private bool[] IsLittleSceneArray
    {
        get
        {
            if (isLittleSceneArray == null) isLittleSceneArray = SceneNames.Select(s => false).ToArray();
            return isLittleSceneArray;
        }
        set
        {
            isLittleSceneArray = value;
        }
    }
    private bool[] IsBakeArray
    {
        get
        {
            if (isBakeArray == null) isBakeArray = new bool[SceneNames.Length];
            return isBakeArray;
        }
        set
        {
            isBakeArray = value;
        }
    }
    private bool[] IsSetStaticArray
    {
        get
        {
            if (isSetStaticArray == null)
            {
                isSetStaticArray = new bool[SceneNames.Length];
            }
            return isSetStaticArray;
        }
        set
        {
            isSetStaticArray = value;
        }
    }
    private Vector2 scro = Vector2.zero;

    private void OnGUI()
    {
        scro= EditorGUILayout.BeginScrollView(scro);
        EditorGUILayout.BeginVertical();
        for (int i = 0; i < SceneNames.Length; i++)
        {
            EditorGUILayout.BeginHorizontal();
            IsCombineArray[i]= EditorGUILayout.ToggleLeft(SceneNames[i], IsCombineArray[i]);
            //IsLittleSceneArray[i] = EditorGUILayout.ToggleLeft("小场景", IsLittleSceneArray[i]);
            IsBakeArray[i]= EditorGUILayout.ToggleLeft("烘焙", IsBakeArray[i],GUILayout.Width(100));
            IsSetStaticArray[i]= EditorGUILayout.ToggleLeft("设置静态", IsSetStaticArray[i], GUILayout.Width(100));
            EditorGUILayout.EndHorizontal();
        }
        EditorGUILayout.EndVertical();
        EditorGUILayout.EndScrollView();
        if (GUILayout.Button("导出"))
        {
            for (int i = 0; i < isCombineArray.Length; i++)
            {
                if (IsCombineArray[i])ExportOneScene(SceneNames[i], IsBakeArray[i], IsSetStaticArray[i]);
            }
        }
    }
    /// <summary>
    /// 导出一个场景
    /// </summary>
    /// <param name="path"></param>
    private static void ExportOneScene(string path, bool bake, bool setStatic)
    {
        var scene = EditorSceneManager.OpenScene(path);
        PBTitle = "正在导出场景:" + scene.name;
        SceneData sd = GetSceneData(scene);
        if (sd == null) return;
        if (setStatic)
        {
            SetSceneStatic(scene);
        }
        if (bake)
        {
            PBContent = "烘焙中";
            if (LightmapSettings.lightmaps.Length > 0)
                Lightmapping.Clear();
            sd.Export(bake);
        }
        EditorUtility.ClearProgressBar();
        Debug.Log("导出场景:" + scene.name);
    }
    /// <summary>
    /// 合并一个场景
    /// </summary>
    /// <param name="path"></param>
    private static void CombineOneScene(string path, bool bake,bool littleScene)
    {
        var scene = EditorSceneManager.OpenScene(path);
        PBTitle = "正在合并场景:" + scene.name;
        SceneData sd = GetSceneData(scene);
        if (sd == null) return;
        var combineGO = CreatCombineObj(scene);
        var blockGO = CreatBlockeObj(scene);
        var miscGO = CreateMiscObj(scene);
        var dic = ClassifyByPositionAndShaderAndProprity(scene,combineGO,blockGO,miscGO,littleScene);
        if (dic.Count == 0)
        {
            sd.Export(bake);
            return;
        }
        string directory = PATH + scene.name + "/";
        if (Directory.Exists(directory))Directory.Delete(directory,true);
        DirectoryInfo dif= Directory.CreateDirectory(directory);
        int count = 0;
        foreach (var item in dic)
        {
            PBContent = count + "/" + dic.Count;
            PBProcess = (float)count / dic.Count;
            Combine(item.Value.Where(s => s != null).Select(s => s.gameObject).ToArray(), scene, ref count, combineGO.transform, directory);
        }
        AddMeshColliderToCameraLayerGOs(scene);
        if (!bake)  //不烘焙就是只合并
        {
            EditorUtility.ClearProgressBar();
            Debug.Log("合并烘焙导出场景:" + scene.name);
            return;
        }
        PBContent = "烘焙中";
        if(LightmapSettings.lightmaps.Length>0)
        Lightmapping.Clear();
        SetTextureType(dif);
        sd.Export(bake);
        EditorUtility.ClearProgressBar();
        Debug.Log("合并烘焙导出场景:" + scene.name);
    }
    private static void SetTextureType(DirectoryInfo dif)
    {
        foreach (var item in dif.GetFiles().Where(s=>s.Extension.Contains("png")).Select(s=>s.FullName.Substring(s.FullName.IndexOf("Assets"))))
        {
            TextureImporter ti = AssetImporter.GetAtPath(item) as TextureImporter;
            if (ti)
            {
                ti.textureType = TextureImporterType.Image;
                ti.wrapMode = TextureWrapMode.Repeat;
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
            }else
            {
                Log.Sys(item + "is not texture");
            }
        }
        Debug.Log("set textures in " + dif.FullName + " to texture mode");
    }

    /// <summary>
    /// 指定位置创建一个Combine物体 用于存放合并后的物体
    /// </summary>
    /// <param name="scene"></param>
    /// <returns></returns>
    private static GameObject CreatCombineObj(UnityEngine.SceneManagement.Scene scene)
    {
        var roots = scene.GetRootGameObjects();
        GameObject combineGO = new GameObject("Combines");
        foreach (var item in roots)
        {
            if (item.name == scene.name.ToLower())
            {
                combineGO.transform.SetParent(item.transform);
                break;
            }
        }
        return combineGO;
    }

    /// <summary>
    /// 指定位置创建一个Block物体 用于存放合并后的物体
    /// </summary>
    /// <param name="scene"></param>
    /// <returns></returns>
    private static GameObject CreatBlockeObj(UnityEngine.SceneManagement.Scene scene)
    {
        var roots = scene.GetRootGameObjects();
        GameObject blockGO = new GameObject("Blocks");
        foreach (var item in roots)
        {
            if (item.name == scene.name.ToLower())
            {
                blockGO.transform.SetParent(item.transform);
                break;
            }
        }
        return blockGO;
    }
    /// <summary>
    /// 创建一个Misc物体
    /// </summary>
    /// <param name="scene"></param>
    /// <returns></returns>
    private static GameObject CreateMiscObj(UnityEngine.SceneManagement.Scene scene)
    {
        var roots = scene.GetRootGameObjects();
        GameObject miscGO = new GameObject("Miscs");
        foreach (var item in roots)
        {
            if (item.name == scene.name.ToLower())
            {
                miscGO.transform.SetParent(item.transform);
                break;
            }
        }
        return miscGO;
    }
    /// <summary>
    /// 获取场景里的所有只有一个材质球的MeshRenderer shader为Scene/Diffuse  或者 是 Scene/Cutout/Diffuse  且 贴图长和宽不能大于1024
    /// </summary>
    /// <param name="s"></param>
    private static MeshRenderer[] GetAllMeshsInScene(UnityEngine.SceneManagement.Scene scene,GameObject combineGo,GameObject blockGo,GameObject miscGo)
    {
        const int texture_MaxSize = 1024;
        var roots = scene.GetRootGameObjects();
        var meshrenders=new List<MeshRenderer>();
        foreach (var item in roots)
        {
            if (item.name == scene.name.ToLower())
            {
                for (int i = 0; i < item.transform.childCount; i++)
                {
                    string name = item.transform.GetChild(i).name;
                    if (name == "height" || name == "effect" || name == "Height" || name == "Effect") continue;
                    meshrenders.AddRange( item.transform.GetChild(i).GetComponentsInChildren<MeshRenderer>().Where(s=>s.enabled==true));
                }
                break;
            }
        }
        foreach (var item in meshrenders)
        {
            if (item.gameObject.layer == LayerMask.NameToLayer(BLOCK_LAYER_NAME))
            {
                item.transform.SetParent(blockGo.transform);
                item.name += "_block-" + item.transform.GetSiblingIndex();
                if (item.GetComponent<Collider>() == null)
                {
                    item.gameObject.AddComponent<BoxCollider>().isTrigger = true;
                }
            }
            else
            {
                item.transform.SetParent(miscGo.transform);
            }
        }
            
        return meshrenders.Where(s => s
        && s.gameObject.layer!=LayerMask.NameToLayer(BLOCK_LAYER_NAME)
        && s.enabled == true
        && s.sharedMaterials.Length == 1
        && s.sharedMaterial
        && (s.sharedMaterial.shader.name == "scenes/Diffuse"
        || s.sharedMaterial.shader.name == "scenes/Cutout/Diffuse")
        && s.sharedMaterial.GetTexture("_MainTex")
        && s.sharedMaterial.GetTexture("_MainTex").texelSize.x <= texture_MaxSize
        && s.sharedMaterial.GetTexture("_MainTex").texelSize.y <= texture_MaxSize)
        .ToArray();
    }

    /// <summary>
    /// 根据坐标,shader,参数分类
    /// </summary>
    /// <param name="meshrenderers"></param>
    private static Dictionary<string, List<MeshRenderer>> ClassifyByPositionAndShaderAndProprity(UnityEngine.SceneManagement.Scene

scene,GameObject combineGo,GameObject blockGo,GameObject miscGo,bool littleScene)
    {
        Dictionary<string, List<MeshRenderer>> dic = new Dictionary<string, List<MeshRenderer>>();
        foreach (var item in GetAllMeshsInScene(scene,combineGo,blockGo,miscGo))
        {
            Material mt = item.sharedMaterial;
            int itemlayer = item.gameObject.layer;
            string layerkind = itemlayer == CAMERA_LAYER ? "Camera" : "NotCamera";
            string tag;
            if (mt.shader.name == "scenes/Cutout/Diffuse")
                tag = littleScene ? "" : GetGridIndex(item.transform) + "|" + mt.shader.name + "|" + mt.GetColor("_Color") + "|" + mt.GetFloat("_Cutoff") + "|" + layerkind;
            else
                tag = littleScene ? "": GetGridIndex(item.transform) + "|" + mt.shader.name + "|" + mt.GetColor("_Colors") + "|" + layerkind;
            if (!dic.ContainsKey(tag))
            {
                dic.Add(tag, new List<MeshRenderer>() { item });
            }
            else
            {
                dic[tag].Add(item);
            }
        }
        //清除只有1个的List
        List<string> checkOneRenderList = new List<string>();
        foreach (var item in dic)
        {
            if (item.Value.Count == 1) checkOneRenderList.Add(item.Key);
        }
        foreach (var item in checkOneRenderList)
        {
            dic.Remove(item);
        }
        return dic;
    }
    /// <summary>
    /// 合并   合并一个List MeshRnder 的  整个逻辑
    /// </summary>
    /// <param name="renderers"></param>
    /// <param name="sceneName">场景名称 用于标记</param>
    /// <param name="index">计数器</param>
    /// <param name="parameter">material的各个参数   //0是坐标 1是shader 2是颜色 3是cutoff值</param>
    /// <param name="combineRoot">合并的根物体 所有合并产生的物体都要放到这个物体下面</param>
    /// <returns></returns>
    private static void Combine(GameObject[] gos, UnityEngine.SceneManagement.Scene scene, ref int index, Transform

combineRoot, string directory)
    {
        if (gos.Length < 2) return;
        GameObject tempgo = new GameObject(scene.name + "_combine_" + index);
        tempgo.transform.SetParent(combineRoot);

        GameObject meshbaker = MB3_MeshBakerEditor.CreateNewMeshBaker();
        meshbaker.transform.SetParent(tempgo.transform);
        MB3_TextureBaker mbtb = meshbaker.GetComponent<MB3_TextureBaker>();
        MB3_MeshBaker mbmb = meshbaker.GetComponentInChildren<MB3_MeshBaker>();
        mbtb.fixOutOfBoundsUVs = true;
        mbtb.maxAtlasSize = 2048;
        mbtb.maxTilingBakeSize = 1024;
        mbtb.atlasPadding = 0;
        mbtb.considerNonTextureProperties = true;
        mbtb.meshBakerTexturePackerForcePowerOfTwo = true;
        mbtb.objsToMesh = gos.ToList();
        //mbtb.textureBakeResults  这个赋值会包含在下面这个方法里
        MB3_TextureBakerEditorInternal.CreateCombinedMaterialAssets(mbtb, directory + index + ".asset");
        mbtb.CreateAtlases(null, true, new MB3_EditorMethods());
        if (mbtb.textureBakeResults != null) EditorUtility.SetDirty(mbtb.textureBakeResults);
        
        mbmb.textureBakeResults = mbtb.textureBakeResults;
        mbmb.CombinedMeshContains(tempgo);
        mbmb.useObjsToMeshFromTexBaker = true;
        mbmb.meshCombiner.doNorm = true;
        mbmb.meshCombiner.doTan = true;
        mbmb.meshCombiner.doUV = true;
        mbmb.resultPrefab = tempgo;
        mbmb.meshCombiner.outputOption = MB2_OutputOptions.bakeIntoSceneObject;
        mbmb.meshCombiner.resultSceneObject = tempgo;
        // mbmb.meshCombiner.targetRenderer = tempgo.AddComponent<MeshRenderer>();
        mbmb.meshCombiner.lightmapOption = MB2_LightmapOptions.generate_new_UV2_layout;
        mbmb.meshCombiner.Apply();
        MB3_MeshBakerEditorInternal.bake(mbmb);

        Mesh tempMesh = tempgo.GetComponentInChildren<MeshFilter>().sharedMesh;
        GameObjectUtility.SetStaticEditorFlags(tempgo.GetComponentInChildren<MeshRenderer>().gameObject, StaticEditorFlags.LightmapStatic);//设置 静态
        #region 设置advanced Parameters
        SerializedObject tempgoso = new SerializedObject(tempgo.GetComponentInChildren<MeshRenderer>());
        SerializedObject so = new SerializedObject(gos[0].GetComponentInChildren<MeshRenderer>());
        SerializedProperty tempgosp = tempgoso.FindProperty("m_LightmapParameters");
        SerializedProperty sp =so.FindProperty("m_LightmapParameters");
        tempgosp.objectReferenceValue = sp.objectReferenceValue;
        tempgoso.ApplyModifiedProperties();
        #endregion
        Unwrapping.GenerateSecondaryUVSet(tempMesh);//生成第二套uv
        AssetDatabase.CreateAsset(tempMesh, directory + "/" + index + "-mesh.asset");
        index++;
        foreach (var item in gos)
        {
            DestroyImmediate(item, false);
        }
        DestroyImmediate(meshbaker);
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }
    /// <summary>
    /// 找到一个场景里的SceneData
    /// </summary>
    /// <param name="scene"></param>
    /// <returns></returns>
    private static SceneData GetSceneData(UnityEngine.SceneManagement.Scene scene)
    {
        var roots = scene.GetRootGameObjects();
        foreach (var item in roots)
        {
            SceneData m = item.GetComponentInChildren<SceneData>();
            if (m) return m;
        }
        return null;
    }

    /// <summary>
    /// 给一个场景里的Camera 层添加MeshCollider
    /// </summary>
    /// <param name="scene"></param>
    private static void AddMeshColliderToCameraLayerGOs(UnityEngine.SceneManagement.Scene scene)
    {
        foreach (var root in scene.GetRootGameObjects())
        {
            foreach (var com in root.GetComponentsInChildren<Renderer>())
            {
                if (com.gameObject.layer == CAMERA_LAYER)
                {
                    MeshCollider mc = com.gameObject.AddComponent<MeshCollider>();
                    mc.convex = true;
                    mc.isTrigger = true;
                    mc.sharedMesh = com.GetComponent<MeshFilter>().sharedMesh;
                }
            }
        }
    }


    /// <summary>
    /// 判读两个物体是不是在同一个格子里
    /// </summary>
    /// <param name="t1"></param>
    /// <param name="t2"></param>
    /// <returns></returns>
    private static bool InSameGrid(Transform t1, Transform t2)
    {
        return (GetGridIndex(t1) == GetGridIndex(t2));
    }
    /// <summary>
    /// 计算一个物体的格子坐标
    /// </summary>
    /// <param name="t"></param>
    /// <returns></returns>
    private static Vector2 GetGridIndex(Transform t)
    {
        return new Vector2((int)(t.position.x / GRIDSIDE), (int)(t.position.z / GRIDSIDE));
    }
    #endregion

    #region 设置场景静态
    public static void SetSceneStatic(UnityEngine.SceneManagement.Scene scene)
    {
      //  var scene = EditorSceneManager.GetActiveScene();
        var roots = scene.GetRootGameObjects();
        foreach (var root in roots)
        {
            if (root.name.ToLower() == scene.name.ToLower())
            {
                float ii = 0;
                var renders = root.GetComponentsInChildren<MeshRenderer>();
                foreach (var renderer in renders)
                {
                    EditorUtility.DisplayProgressBar("设置中。。", renderer.name + ii++ + "/" + renders.Length,ii/renders.Length);
                    DestroyImmediate(renderer.GetComponent<Collider>());
                    if (renderer.gameObject.layer != CAMERA_LAYER)
                    {
                        if(renderer.sharedMaterial&&(renderer.sharedMaterial.shader.name== "scenes/Diffuse"|| renderer.sharedMaterial.shader.name == "scenes/Cutout/Diffuse"))
                        {
                            GameObjectUtility.SetStaticEditorFlags(renderer.gameObject, GameObjectUtility.GetStaticEditorFlags(renderer.gameObject) | StaticEditorFlags.BatchingStatic);
                        }
                    }else
                    {
                        ModelImporter mi = (ModelImporter)AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(renderer.GetComponent<MeshFilter>().sharedMesh));
                        if (mi&&!mi.isReadable)
                        {
                            EditorUtility.DisplayProgressBar("ReImporteing...", renderer.name + ii + "/" + renders.Length, ii / renders.Length);
                            mi.isReadable = true;
                            mi.SaveAndReimport();
                        }
                        renderer.gameObject.AddComponent<MeshCollider>();
                        Debug.Log("Add Collider To " + renderer.name);
                    }
                }
                EditorUtility.ClearProgressBar();
                break;
            }
        }
        Debug.Log("设置完成:" + scene.name);
    }
    #endregion
}
回复

使用道具 举报

4四处流浪
447/500
排名
6484
昨日变化

14

主题

67

帖子

447

积分

Rank: 4

UID
265611
好友
1
蛮牛币
188
威望
0
注册时间
2018-1-21
在线时间
158 小时
最后登录
2019-7-23
楼主 2019-5-17 15:00:19 显示全部楼层
本帖最后由 chumingyang 于 2019-5-17 15:01 编辑
wty 发表于 2019-5-13 20:50
using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;

using DigitalOpus.MB.Core;
这个是啥给下呗蛮牛币已到账
回复

使用道具 举报

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

本版积分规则