Unity --- MeshRenderer之网格合并

创建如图所示的对象结构,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之网格合并的更多相关文章
- Unity 网格合并
从优化角度,Mesh需要合并. 从换装的角度(这里指的是换形状.换组成部件的换装,而不是挂点型的换装),都需要网格合并.材质合并.如果是人物的换装,那么需要合并SkinnedMeshRenderer, ...
- Unity网格合并_材质合并
[转]Unity网格合并_材质合并 原帖请戳:Unity网格合并_材质合并 写在前面: 从优化角度,Mesh需要合并. 从换装的角度(这里指的是换形状.换组成部件的换装,而不是挂点型的换装),都需要网 ...
- 【转】Unity网格合并_材质合并
原帖请戳:Unity网格合并_材质合并 写在前面: 从优化角度,Mesh需要合并. 从换装的角度(这里指的是换形状.换组成部件的换装,而不是挂点型的换装),都需要网格合并.材质合并.如果是人物的换装, ...
- unity换装系统+网格合并
这里的做法是模型把所有衣服全部穿上作为一个资源 然后还有一个只有骨骼信息的骨架资源 将这2个制作好了Prefab 模型部件数据 资源数据 [代码] using System.Collections; ...
- Unity3d网格合并
几个不同的物体,在Unity3d中可以将网格合并在一起,用于优化. 在Unity3d中构建临时场景如下:建一C#脚本名为"CombineMeshes",挂在Cube上. Combi ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 合并单元格
jQuery EasyUI 数据网格 - 合并单元格 数据网格(datagrid)经常需要合并一些单元格.本教程将向您展示如何在数据网格(datagrid)中合并单元格. 为了合并数据网格(datag ...
- Unity中的网格与材质球合并
http://blog.csdn.net/dardgen2015/article/details/51517860
- Unity网格合并_材质合并[转]
http://blog.csdn.net/chenggong2dm/article/details/41699029
- Unity3d mesh合并,网格合并具体用法教程
Unity开发Mesh合并网格 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...
随机推荐
- maven maven.compiler.source和maven.compiler.target的坑
最近建议产品组把jdk 1.7升级到1.8,昨晚开发报了个问题过来,说maven.compiler.source和maven.compiler.target改成1.8之后,编译出来的代码还是1.7,如 ...
- 【题解】Luogu P3740 [HAOI2014]贴海报
woc,今天已经是day -1了 再写一颗珂朵莉树来++rp吧 否则就要AFO了qaq 这有可能是我最后一篇题解/博客qaq 原题传送门:P3740 [HAOI2014]贴海报 考前刷水题到底是对还是 ...
- 装了as之后提示NO JVM installation found.....
如图. 解决:在AS安装目录下,找到对应的程序[jdk是多少位就打开多少位的]
- Restful framework【第六篇】认证组件
基本用法 -认证功能 1 写一个类,继承BaseAuthentication 2 def authenticate(self,request) ,记住传request对象 -如果验证通过,返回None ...
- Golang模拟客户端POST表单功能文件上传
客户端通过multipart.Write把文件的文本流写入一个缓存中,然后调用http的Post方法把缓存传到服务器. package main import ( "bytes" ...
- Eclipse 创建maven项目 报错 one or more constraints have not been satisfied
首先 在 pom.xml > plugins 中添加 <plugin> <groupId>org.apache.maven.plugins</groupId> ...
- R class of subset of matrix and data.frame
a = matrix( c(2, 4, 3, 1, 5, 7), # the data elements nrow=2, # number of rows ...
- (转)Awesome PyTorch List
Awesome-Pytorch-list 2018-08-10 09:25:16 This blog is copied from: https://github.com/Epsilon-Lee/Aw ...
- Vue属性中带’-‘的处理方式
我们在写属性时经常会加入’-‘来进行分词,比如:<panda from-here=”China”></panda>,那这时我们在props里如果写成props:[‘form-h ...
- Global.asax.cs中相关方法
protected void Session_Start(object sender, EventArgs e) { #if DEBUG //debug 登陆默认设置 #endif } protect ...