Unity3D动态对象优化代码分享
更新时间:2020年6月25日 11:32 点击:2079
具体解释请仔细看注释里已经讲解的很细致了,这里就不多废话了
复制代码 代码如下:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// 动态对象优化
/// </summary>
public class DynamicOptimization : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
/// <summary>
/// 动态对象优化
/// </summary>
/// <param name="gameObject">物体</param>
public void DynamicObjectOptimization(GameObject gameObject)
{
//SkinnedMeshRenderer:蒙皮网格渲染器---获取所有带有网格渲染器的物体(包含子物体)
SkinnedMeshRenderer[] smr = gameObject.GetComponentsInChildren<SkinnedMeshRenderer>();
//CombineInstance:用来描绘网格合并的结构,结合网格有利于性能最优化
List<CombineInstance> listCom = new List<CombineInstance>();
//所有材质集合
List<Material> listMat = new List<Material>();
//物体的基本信息集合
List<Transform> listTrans = new List<Transform>();
for(int i=0;i<smr.Length;i++)
{
//获取材质信息
listMat.AddRange(smr[i].materials);
//物体信息---bones:用于蒙皮网格的骨骼列表
listTrans.AddRange(smr[i].bones);
//获取共享网格的信息
for(int k=0;k<smr[i].sharedMesh.subMeshCount;k++)
{
//合并实例
CombineInstance ci = new CombineInstance();
//获取网格信息
ci.mesh = smr[i].sharedMesh;
//获取网格的索引信息
ci.subMeshIndex = k;
//添加
listCom.Add(ci);
}
//删除
Destroy(smr[i].gameObject);
}
//获取物体上的渲染器信息
SkinnedMeshRenderer smRenderer = gameObject.GetComponent<SkinnedMeshRenderer>();
//判断是否包含有网格渲染器,如果没有则进行添加
if(smRenderer==null)
{
smRenderer = gameObject.AddComponent<SkinnedMeshRenderer>();
}
//蒙皮网格
smRenderer.sharedMesh = new Mesh();
//骨骼列表
smRenderer.bones = listTrans.ToArray();
//材质
smRenderer.materials = new Material[] { listMat[0] };
//获取物体的信息
smRenderer.rootBone = gameObject.transform;
//合并网格(CombineMeshes)函数的第二个参数是设置是否将多个子网格合并成一张实际的网格。
//一个实际的网格只能施加一个材质,所以只有被合并的所有网格原来使用的就是同一个材质(即共享材质)时,
//将它们真正合并才能正确应用材质。否则应该将该参数置为false,表示不实际合并这些sub mesh,
//而是将它们作为被合并后Mesh对象的sub mesh。
smRenderer.sharedMesh.CombineMeshes(listCom.ToArray(), true);
}
}
以上就是本文所述的全部内容了,希望大家能够喜欢
上一篇: c#与js随机数生成方法
下一篇: C#实现的鼠标钩子
相关文章
- 关于mysql效率优化一般通过以下两种方式定位执行效率较低的sql语句。通过慢查询日志定位那些执行效率较低的 SQL 语句,用 --log-slow-queries[=file_name] 选项启动时, mysqld 会 写一个包含所有执行时间超过 long_quer...2015-11-08
- 过了这么久,discuz论坛的问题还是困扰着很多网友,其实从各论坛里看到的问题总结出来,很关键的一点都是因为没有将数据表引擎转成InnoDB导致的,discuz在并发稍微高一点的环境下就表现的非常糟糕,产生大量的锁等待,这时候如果...2015-11-24
- java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
- MySQL是一个功能强大的开源数据库。随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限。这里是101条调节和优化 MySQL安装的技巧。一些技巧是针对特定的安装环境的,但这些思路是通用的。我已经把...2013-09-11
- 这篇文章主要介绍了Angular性能优化之第三方组件和懒加载技术,对性能优化感兴趣的同学,可以参考下...2021-05-11
- 本文给大家介绍的是C#程序优化的小技巧,通过此方法可以有效的降低CPU的占用率,十分的简单实用,有需要的小伙伴可以参考下。...2020-06-25
- 这篇文章主要介绍了JavaScript提高网站性能优化的建议(二)的相关资料,需要的朋友可以参考下...2016-07-29
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
这篇文章主要介绍了利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化),本文给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-24网站广告怎么投放最好?首屏广告投放类型优化和广告位布局优化的案例
网站广告怎么投放最好?一个网站中广告位置最好的是哪几个地方呢,许多的朋友都不知道如何让自己的网站广告收效最好了,今天我们就一起来看看吧。 在说到联盟优化前,...2016-10-10- 这篇文章主要介绍了Vue开发网站seo优化方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-07
CocosCreator ScrollView优化系列之分帧加载
这篇文章主要介绍了CocosCreator ScrollView的优化,从分帧加载进行了讲解,对性能优化感兴趣的同学,一定要看一下...2021-04-15- 昨天在《js 正则学习小记之匹配字符串字面量》谈到 /"(?:\\.|[^"])*"/ 是个不错的表达式,因为可以满足我们的要求,所以这个表达式可用,但不一定是最好的...2021-05-07
- 这篇文章主要为大家详细介绍了Unity3D UGUI实现翻书特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 经过代码优化升级的文件下载与页面显示速度更快;内容能够被更多的用户所访问(包括残障人士等);当浏览器版本更新,或者出现新的网络交互设备时,确保所有应用能够继续正确...2017-07-06
什么是INDEX, NOINDEX, FOLLOW和 NOFOLLOW及优化和特点
什么是INDEX, NOINDEX, FOLLOW和 NOFOLLOW及优化和特点 The Robots META tag放于后台HTML源代码的标头区(HEAD区)中。 我举一个例子: <HTML> <HEAD>...2017-07-06- 这篇文章主要为大家详细介绍了MySQL分页优化,内容思路很详细,有意对MySQL分页优化的朋友可以参考一下...2016-04-22
- 这篇文章主要介绍了Java优化for循环嵌套的高效率方法,帮助大家更好的提升java程序性能,感兴趣的朋友可以了解下...2020-09-14
- 这篇文章介绍了网站中图片日常使用以及优化手法,非常实用,有需要的同学不妨来看看吧 前言: 最近新到一个团队,才意识到基础的薄弱,牛人遍地,还是好好学习,天天向上。 一...2017-01-22
- 这篇文章主要为大家详细介绍了Unity3D使用GL实现图案解锁功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 这篇文章主要为大家详细介绍了Unity3D实现飞机大战游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-11-03