Unity3D中如何计算场景中的三角面和顶点数
在做游戏开发时,场景中的三角面和顶点数影响着运行效率,尤其是在手机平台上,实时的知道场景中的各项指标,对性能优化来说至关重要,下面我们来实现一个小功能,来实时计算场景中的三角面和顶点数;
如果要知道场景中的三角面和顶点数,首先我们要得到场景中所有的物体,如下:
GameObject[] ob = FindObjectsOfType(typeof(GameObject)) as GameObject[];
其次,在我们得到的这些Gameobject中,有的含有MeshFilter 有的不含有,我们要得到这些物体中哪些包含MeshFilter,所以:
Component[] filters;filters = obj.GetComponentsInChildren<MeshFilter>();
然后我们再在这些filters中得到每个物体的三角面和顶点数,然后再把他们相加,就是我们所要的知道的场景中所有物体的三角面的顶点总数:
foreach (MeshFilter f in filters){tris += f.sharedMesh.triangles.Length / 3;verts += f.sharedMesh.vertexCount;}
接下来,我们需要把得到的数据显示在前端来供我们查看:
void OnGUI(){string vertsdisplay = verts.ToString("#,##0 verts");GUILayout.Label(vertsdisplay);jiexstring trisdisplay = tris.ToString("#,##0 tris");GUILayout.Label(trisdisplay);}
在场景中运行,如下所示:
源码如下:
using UnityEngine;
using System.Collections;public class CalculateVertsAndTris : MonoBehaviour
{public float f_UpdateInterval = 0.5F; //刷新间隔private float f_LastInterval; //上一次刷新的时间间隔public static int verts;public static int tris;// Use this for initializationvoid Start () {f_LastInterval = Time.realtimeSinceStartup;}/// <summary>/// 得到场景中所有的GameObject/// </summary>void GetAllObjects(){verts = 0;tris = 0;GameObject[] ob = FindObjectsOfType(typeof(GameObject)) as GameObject[];foreach (GameObject obj in ob){GetAllVertsAndTris(obj);}}//得到三角面和顶点数void GetAllVertsAndTris(GameObject obj){Component[] filters;filters = obj.GetComponentsInChildren<MeshFilter>();foreach (MeshFilter f in filters){tris += f.sharedMesh.triangles.Length / 3;verts += f.sharedMesh.vertexCount;}}void OnGUI(){string vertsdisplay = verts.ToString("#,##0 verts");GUILayout.Label(vertsdisplay);string trisdisplay = tris.ToString("#,##0 tris");GUILayout.Label(trisdisplay);}// Update is called once per framevoid Update(){if (Time.realtimeSinceStartup > f_LastInterval + f_UpdateInterval){f_LastInterval = Time.realtimeSinceStartup;GetAllObjects();}}
}
好了,这一章就写到这,欢迎大家加入QQ群:280993838 或者关注我的公众号:
转载于:https://www.cnblogs.com/Zander-1349547081/p/6347069.html
Unity3D中如何计算场景中的三角面和顶点数相关推荐
- 3D场景中选取场景中的物体。
杨航最近在学Unity3D 在一些经典的游戏中,需要玩家在一个3D场景中选取场景中的物体.例如<仙剑奇侠传>,选择要攻击的敌人时.为我方角色增加血量.为我方角色添加状态,通常我们使 ...
- 移动场景在其缩略图中显示场景中所显示的区域
需求描述 在场景中实现拖动,缩放,并在场景的缩略图中显示其对应在视口中显示的矩形区域. 程序效果图如下: 开发环境:Qt 5.13.1 编译环境:MinGW64 项目结构: 直接上程序: main.c ...
- unity3d如何获知场景中需要加载的数据_游戏中遮挡剔除方案总结
这是侑虎科技第507篇文章,感谢作者FrankZhou供稿.欢迎转发分享,未经作者授权请勿转载.如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨.(QQ群:793972859) 作者主页:htt ...
- hive中如何计算字符串中表达式
比如 select ' 1+(2-3)+(-4.1-3.1)-(4-3)-(-3.3+4.3)-1 ' col ,1+(2-3)+(-4.1-3.1)-(4-3)-(-3.3+4.3)-1 resul ...
- [Unity3D]Unity3D游戏开发之在3D场景中选择物体并显示轮廓效果
大家好,我是秦元培.我参加了CSDN2014博客之星的评选,欢迎大家为我投票,同时希望在新的一年里大家能继续支持我的博客! 大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn. ...
- AR识别场景中UI被挡住的问题
在Unity利用高通SDK制作场景的过程中 在场景中的ImageTarget中添加了一个模型 之后在场景的识别过程中 模型显示出来后会挡住UI 即UI是先生成然后再生成模型 所以模型会挡住ui 但是 ...
- 解析OBJ模型并将其加载到Unity3D场景中
版权声明:本文由秦元培创作和发表,采用署名(BY)-非商业性使用(NC)-相同方式共享(SA)国际许可协议进行许可,转载请注明作者及出处,本文作者为秦元培,本文标题为解析OBJ模型并将其加载到Unit ...
- Unity3D中关于场景销毁时事件调用顺序的一点记录
先说一下我遇到的问题,我弄了一个对象池管理多个对象,对象池绑定在一个GameObject上,每个对象在OnBecameInvisible时会进行回收(即移出屏幕就回收),但是当场景切换或停止运行程序时 ...
- Maya中的场景与Unity3D中的场景匹配
我公司多是把Maya做的东西输出成视频,然后在正式使用的时候用播放器播放,但如果想要在每次播放的时候加上不同的效果,比如在视频里的某物体上加上文字,这样都要再重新输出一遍,相当费时. 解决办法是用Un ...
最新文章
- Linux 终端命令行提示符的艺术--PS1进阶
- Python matplotlib可视化:用Matplotlib的bar_label函数自定义条形图的数值标签、用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的中部)
- CF1009F-Dominant Indices【长链剖分】
- [Leetcode][第24题][JAVA][两两交还的链表中的节点][递归][三指针]
- cass或cad里提取点坐标及高程的插件_一个坐标计算小程序 EXCEL 可以进行抵偿任意带高斯坐标转换...
- devc运行不出窗口_足不出户“云出庭”?沾化“智慧检务”让法律监督“不打烊...
- (第二章)mysql创建数据库
- 投资大鳄摩根士丹利成Accellion FTA 服务器被黑事件的又一个受害者
- php mysql插入多个列_php mysql插入多条记录
- 098 元类(metaclass)
- Note that ‘/home/w/.local/share‘ is not in the search pathset by the XDG_DATA_HOME and XDG_DATA_DIRS
- 批量word转pdf——VBS脚本,在office宏中运行即可
- Elasticsearch:InteliJ Elasticsearch plugin 集成
- win7音量图标不见了 点显示它图标和通知 提示但前未处于活动
- future java get_关于 Future get方法的疑问
- 电影点评系统论文java_java电影在线定制影评管理系统
- 苹果宣布推出新的Mac Mini和MacBook Pro与M2 Pro和M2 Max
- python做工控机_「上位机软件」工控机上位机软件的开发历程(一) - seo实验室...
- Windows 计算机上查看 DNS 缓存的方法
- RabbitMQ从入门到实践