从优化角度,Mesh需要合并。

从换装的角度(这里指的是换形状、换组成部件的换装,而不是挂点型的换装),都需要网格合并、材质合并。如果是人物的换装,那么需要合并SkinnedMeshRenderer,并重刷对应的骨骼列表。网格合并后对模型的渲染可以降低GPU的负担,但是经过测试发现,虽然网格合并了但是由于子物体网格的材质是不同的并没有降低DrawCall,如果把材质改成相同的,Unity自身会进行批处理合并,所以DrawCall就会减少!在MMO的游戏中,网格动态合并还是非常有必要的!

网格合并代码:

   private void CombineMesh()
{
//获取自身和所有子物体中所有的 MeshRenderer 组件
MeshRenderer[] meshRenderers = GetComponentsInChildren<MeshRenderer>(); //材质球数组
Material[] materials = new Material[meshRenderers.Length]; for (int i = ; i < meshRenderers.Length; i++)
{
materials[i] = meshRenderers[i].sharedMaterial;
} // 合并 Mesh
// 后去自身和子物体中所有 MsehFilter 组件
MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>(); CombineInstance[] combines = new CombineInstance[meshRenderers.Length]; for (int i = ; i < meshFilters.Length; i++)
{
combines[i].mesh = meshFilters[i].sharedMesh;
// 矩阵(Matrix)自身空间坐标的点转换成世界空间坐标的点
combines[i].transform = meshFilters[i].transform.localToWorldMatrix;
meshFilters[i].gameObject.SetActive(false);
} //重新生成mesh
MeshFilter meshFilter = transform.GetComponent<MeshFilter>();
if (meshFilter == null)
{
meshFilter = gameObject.AddComponent<MeshFilter>();
} // 给 MeshFilter 组件的 mesh 赋值
meshFilter.mesh = new Mesh();
//合并Mesh, 第二个参数 false,表示并不合并为一个网格,而是一个自网格列表
transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combines, false);
transform.gameObject.SetActive(true); //为合并后的新Mesh 指定材质
//transform.GetComponent<MeshRenderer>().sharedMaterials = materials; MeshRenderer meshRender = transform.GetComponent<MeshRenderer>();
if (meshRender == null)
{
meshRender = gameObject.AddComponent<MeshRenderer>();
}
meshRender.sharedMaterials = materials;
}

运行前:

合并之后:

发现合并之后,三个子物体的材质都在父物体上,材质合并到了一个MeshRender下。

工程地址:git@git.oschina.net:wuzhang/UnityCombineMeshRender.git

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

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

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

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

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

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

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

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

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

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

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

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

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

  7. Unity3d网格合并

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

  8. Unity --- MeshRenderer之网格合并

    创建如图所示的对象结构,parent为空对象,然后将下面的代码挂载到parent对象上运行即可. using UnityEngine; using System.Collections; public ...

  9. 基于geohash6编码实现相邻4、9、16网格合并

    前面的两篇文章介绍了geohash的基本原理及c#代码相关实现,其中geohash 5位编码单个网格覆盖面积大约在24平方千米,6位编码单网格覆盖面大约在0.73平方千米, 相邻编码长度之间单网格覆盖 ...

随机推荐

  1. Mysql根据指定字段的int值查出在当前列表的排名

    先看表结构和数据: DROP TABLE IF EXISTS `ndb_record`; CREATE TABLE `ndb_record` ( `id` bigint(20) NOT NULL AU ...

  2. svn版本管理系统出现的问题解决办法

    首先会出现下面的一个提示错误: cannot checkout from svn run 'cleanup' if it was interrupted 百度加谷歌找到的解决问题的办法各种各样,自己遇 ...

  3. (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]一行js代码的原理分析

    再说这行代码之前,咱们先来预习一下知识. 我们都知道计算机操作系统分为32位或者64位.那么这个32位或64位指的是什么意思呢?其实,要想解释它并不难,其实这就是计算机处理数据的机制,32位表示计算机 ...

  4. 利用Apache配置本地 自定义域名

    第一步:配置 httpd.conf 开启 虚拟主机 配置模块 去掉 " Include conf/extra/httpd-vhosts.conf " 前面的" # &qu ...

  5. web前端开发工程师工资多少

      做web前端开发工程师工资高不高?下面千锋小编为大家分析一下:作为目前互联网行业中的主流技术,Web前端一直是占有重要的地位.尤其是近年来HTML5技术的突飞猛进,使Web前端技术有了更好的发展. ...

  6. AutoMapper 使用心得

    在很久之前就已经有了解到AutoMapper 这一个组件了,但是却一直不明白这个东西要怎么使用,是用来干什么的.经过几经周折之后,看了资料大概5.6次吧,总算理解其中的用途和原理(请原谅我理解能力太差 ...

  7. 1.3 PCI总线的存储器读写总线事务

    总线的基本任务是实现数据传送,将一组数据从一个设备传送到另一个设备,当然总线也可以将一个设备的数据广播到多个设备.在处理器系统中,这些数据传送都要依赖一定的规则,PCI总线并不例外. PCI总线使用单 ...

  8. 实战DeviceIoControl 之四:获取硬盘的详细信息

    Q 用IOCTL_DISK_GET_DRIVE_GEOMETRY或IOCTL_STORAGE_GET_MEDIA_TYPES_EX只能得到很少的磁盘参数,我想获得包括硬盘序列号在内的更加详细的信息,有 ...

  9. windows下python3.4安装lxml提示"Unable to find vcvarsall.bat"

    "https://pypi.python.org/pypi/lxml/3.6.0"从这个网址直接下载对应的lxml包,exe格式的,直接安装,问题解决!

  10. Hidden Markov Models(HMM) 初理解

    1. 一个简单例子