创建如图所示的对象结构,parent为空对象,然后将下面的代码挂载到parent对象上运行即可。

 using UnityEngine;
using System.Collections; public class CombineMeshAndMaterials : MonoBehaviour
{
void Start()
{
CombineMesh();
}
void CombineMesh()
{
//收集要合并的贴图
MeshRenderer[] oldMRArray = GetComponentsInChildren<MeshRenderer>();
Material[] oldMArray = new Material[oldMRArray.Length];
Texture2D[] textures = new Texture2D[oldMRArray.Length];
for (int i = , iMax = oldMRArray.Length; i < iMax; ++i)
{
oldMArray[i] = oldMRArray[i].sharedMaterial;
Texture2D t2d = oldMArray[i].GetTexture("_MainTex") as Texture2D;
Texture2D _t2d = new Texture2D(t2d.width, t2d.height, TextureFormat.ARGB32, false);
_t2d.SetPixels(t2d.GetPixels(, , t2d.width, t2d.height));
_t2d.Apply();
textures[i] = _t2d;
} //创建合并后的材质
MeshRenderer newMR = gameObject.AddComponent<MeshRenderer>();
Material newM = new Material(oldMArray[].shader);
newM.CopyPropertiesFromMaterial(oldMArray[]);
newMR.sharedMaterial = newM; //创建合并后的贴图,
Texture2D newTex = new Texture2D(, );
newM.SetTexture("_MainTex", newTex); //将合并后的贴图赋给合并后的材质 //重新计算贴图UV
MeshFilter[] oldMF = GetComponentsInChildren<MeshFilter>();
CombineInstance[] combines = new CombineInstance[oldMF.Length];
Rect[] rects = newTex.PackTextures(textures, , ); //贴图打包 ,矩形的数组包含每个输入的纹理的UV坐标
for (int i = , iMax = oldMF.Length; i < iMax; ++i)
{
Rect rect = rects[i];
Mesh mesh = oldMF[i].mesh;
Vector2[] newUVs = new Vector2[mesh.uv.Length]; //刷新uv
for (int j = , jMax = mesh.uv.Length; j < jMax; ++j)
{
//如果这里看不太懂,说明对uv的确切含义不太明白
//uv是一个比值,u = 横向第u个像素/原始贴图的宽度 v = 竖向第v个像素/原始贴图的高度
//rect.x : 原贴图在合并后的贴图的 x 坐标, rect.y : 原贴图在合并后的贴图的 y 坐标
newUVs[j].x = mesh.uv[j].x * rect.width + rect.x;
newUVs[j].y = mesh.uv[j].y * rect.height + rect.y;
}
mesh.uv = newUVs;
combines[i].mesh = mesh;
combines[i].transform = oldMF[i].transform.localToWorldMatrix; //没有这句,合并后的网格无法看到
oldMF[i].gameObject.SetActive(false);
} //创建合并后的网格
MeshFilter newMF = gameObject.AddComponent<MeshFilter>();
Mesh newMesh = new Mesh();
newMesh.CombineMeshes(combines, true, true);
newMF.mesh = newMesh;
}
}

Unity --- MeshRenderer之网格合并的更多相关文章

  1. Unity 网格合并

    从优化角度,Mesh需要合并. 从换装的角度(这里指的是换形状.换组成部件的换装,而不是挂点型的换装),都需要网格合并.材质合并.如果是人物的换装,那么需要合并SkinnedMeshRenderer, ...

  2. Unity网格合并_材质合并

    [转]Unity网格合并_材质合并 原帖请戳:Unity网格合并_材质合并 写在前面: 从优化角度,Mesh需要合并. 从换装的角度(这里指的是换形状.换组成部件的换装,而不是挂点型的换装),都需要网 ...

  3. 【转】Unity网格合并_材质合并

    原帖请戳:Unity网格合并_材质合并 写在前面: 从优化角度,Mesh需要合并. 从换装的角度(这里指的是换形状.换组成部件的换装,而不是挂点型的换装),都需要网格合并.材质合并.如果是人物的换装, ...

  4. unity换装系统+网格合并

    这里的做法是模型把所有衣服全部穿上作为一个资源 然后还有一个只有骨骼信息的骨架资源 将这2个制作好了Prefab 模型部件数据 资源数据 [代码] using System.Collections; ...

  5. Unity3d网格合并

    几个不同的物体,在Unity3d中可以将网格合并在一起,用于优化. 在Unity3d中构建临时场景如下:建一C#脚本名为"CombineMeshes",挂在Cube上. Combi ...

  6. 雷林鹏分享:jQuery EasyUI 数据网格 - 合并单元格

    jQuery EasyUI 数据网格 - 合并单元格 数据网格(datagrid)经常需要合并一些单元格.本教程将向您展示如何在数据网格(datagrid)中合并单元格. 为了合并数据网格(datag ...

  7. Unity中的网格与材质球合并

    http://blog.csdn.net/dardgen2015/article/details/51517860

  8. Unity网格合并_材质合并[转]

    http://blog.csdn.net/chenggong2dm/article/details/41699029

  9. Unity3d mesh合并,网格合并具体用法教程

    Unity开发Mesh合并网格 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...

随机推荐

  1. bzoj 4591 超能粒子炮·改 - Lucas

    Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威 ...

  2. Codeforces 438D The Child and Sequence - 线段树

    At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at ...

  3. weblogic10以下,许可证过期解决办法

    weblogic10以后的版本已经不再使用license.bea的方式来进行软件授权,之前的历史版本oracle提供了一个免费的许可证更新. 1.首先进入oracle的官网下载地址http://www ...

  4. Python3 tkinter基础 Canvas coords 移动直线,itemconfig 设置矩形的颜色, delete 删除一条直线

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  5. android 6 中init.rc的生成过程【转】

    本文转载自:https://blog.csdn.net/quhj/article/details/51819638 android 系统开机是会有一个初始化过程 init ,整个初始化过程是根据配置脚 ...

  6. 如何查看linux程序被何种版本的编译器编译的?

    答: 使用vi工具之间搜索关键字"GCC"即可找出编译该程序的编译器版本号!

  7. JAVA JDBC 增删改查简单例子

    1.数据库配置文件jdbc.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test username= ...

  8. 题解——loj6279 数列分块入门3 (分块)

    用set维护有序序列 或许sort也可以,但这题的前驱定义是严格小于 所以要去重 然后就是记得自己打的加法tag在query的时候一定要算上 话说这题数据有点fake啊忘了查询算上自己的标记了还有70 ...

  9. (转)Applications of Reinforcement Learning in Real World

    Applications of Reinforcement Learning in Real World 2018-08-05 18:58:04 This blog is copied from: h ...

  10. 谷歌大规模机器学习:模型训练、特征工程和算法选择 (32PPT下载)

    本文转自:http://mp.weixin.qq.com/s/Xe3g2OSkE3BpIC2wdt5J-A 谷歌大规模机器学习:模型训练.特征工程和算法选择 (32PPT下载) 2017-01-26  ...