• UNITY 网格合并


    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class NewBehaviourScript : MonoBehaviour {
    
        public Avatar a;
    
    	// Use this for initialization
    	void Start () {
    
    
            MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>();
    
            Debug.Log("meshFilters:" + meshFilters.Length);
    
            CombineInstance[] combine = new CombineInstance[meshFilters.Length];
    
    
    
            MeshRenderer[] meshRendererList = GetComponentsInChildren<MeshRenderer>();  //获取自身和所有子物体中所有MeshRenderer组件
            Material[] mats = new Material[meshRendererList.Length];                    //新建材质球数组
    
    
            Texture2D[] texList = new Texture2D[meshRendererList.Length];
    
    
            int i = 0;
            while (i < meshFilters.Length)
            {
    
                //mats[meshFilters.Length-i-1] = meshRendererList[i].sharedMaterial;                           //获取材质球列表
    
                mats[i] = meshRendererList[i].sharedMaterial;
    
                //
    
                Color c = mats[i].color;
    
                /*
                 * */
    
                Texture2D tx = mats[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();
    
                //
                texList[i] = tx2D;
                
                combine[i].mesh = meshFilters[i].sharedMesh;
                //combine[i].transform = meshFilters[i].transform.localToWorldMatrix;
    
                combine[i].transform = transform.worldToLocalMatrix * meshFilters[i].transform.localToWorldMatrix;
    
                meshFilters[i].gameObject.SetActive(false);
                i++;
            }
    
            //
            string shName = mats[0].shader.name;
    
    
            Material matNew = new Material(mats[0].shader);
            matNew.CopyPropertiesFromMaterial(mats[0]);
    
    
            Texture2D texNew = new Texture2D(1024, 1024);
            matNew.SetTexture("_MainTex", texNew);
            Rect[] rects = texNew.PackTextures(texList, 0);//, 2048);
    
            //
            GameObject quad = GameObject.Find("Quad");
            quad.GetComponent<MeshRenderer>().material.mainTexture = texNew;
    
    
            Mesh meshNew = new Mesh();
    
           
            //
            i = 0;
            while (i < meshFilters.Length)
            {
                int uvLen = combine[i].mesh.uv.Length;
                Vector2[] uvData = combine[i].mesh.uv;
    
    
                for(int j = 0;j< uvLen;j++)
                {
                    uvData[j].x = uvData[j].x * rects[i].width + rects[i].x;
                    uvData[j].y = uvData[j].y * rects[i].height + rects[i].y;
    
    
                }
    
                //直接设不行
                //combine[i].mesh.uv = uvData;
    
                meshFilters[i].mesh.uv = uvData;
                combine[i].mesh = meshFilters[i].mesh;
    
                i++;
            }
    
            
    
            transform.GetComponent<MeshFilter>().mesh = meshNew;
    
            transform.GetComponent<MeshFilter>().name = "xxx";
    
            transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine, true);//,truefalse);////
    
            //为合并后的GameObject指定材质
            //transform.GetComponent<MeshRenderer>().sharedMaterials =mats;// materialNew;//          
            transform.GetComponent<MeshRenderer>().sharedMaterial = matNew;
    
    
            transform.gameObject.SetActive(true);
    
    
        }
    
        // Update is called once per frame
        void Update () {
    		
    	}
    }
    

      

  • 相关阅读:
    PHP实现---汉字简体繁体转换
    js对象中的回调函数
    常用js正则
    复合sql
    恢复和去掉所有表约束
    小心as"陷阱"(c#)
    由“js跨域”想到"AJAX也不一定要XMLHttpRequest"
    jsonp与跨域
    关于js的string的3个函数slice,substring,substr对比
    英语etc怎么发音、单词来历
  • 原文地址:https://www.cnblogs.com/jiahuafu/p/6718069.html
Copyright © 2020-2023  润新知