【UnityEditor】查看模型Mesh面数/顶点数

2023-11-07 19:20

本文主要是介绍【UnityEditor】查看模型Mesh面数/顶点数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

 

 去掉GUI字体的三角面数,统计到的数据与Unity面板显示一致。

   Unity默认天空盒有大约1.7k三角面,5k顶点,如果使用了天空盒,需要额外注意。

关键步骤:

  • Selection.selectionChanged:编辑器下当前选中的Gameobject发生变化的回调
  • Selection.gameObjects:编辑器下当前选中的Gameobject
  • 获取所有网格数据:
    • Gameobject.GetComponentsInChildren():获取自身节点及所有嵌套下属节点的MeshFilter组件
    • Gameobject.GetComponentsInChildren():获取自身节点及所有嵌套下属节点的SkinnedMeshRenderer组件
  • 统计网格数据:
    • MeshFilter.sharedMesh.triangles.Length(MeshFilter三角面数)
    • MeshFilter.sharedMesh.vertexCount(MeshFilter顶点数)
    • SkinnedMeshRenderer.sharedMesh.triangles.Length(SkinnedMeshRenderer三角面数)
    • SkinnedMeshRenderer.sharedMesh.vertexCount(SkinnedMeshRenderer顶点数)

示例统计代码:

#if UNITY_EDITORusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class CalculateMeshTris : MonoBehaviour
{[SerializeField] private bool active = true;private int verts;private int tris;private GUIStyle textStyle = new GUIStyle();private void Start(){textStyle.normal.background = null;textStyle.normal.textColor = new Color(1.0f,0.5f,0.0f);textStyle.fontSize = 30;if(active){Selection.selectionChanged += CalculateVertsAndTris;CalculateVertsAndTris();}}private void CalculateVertsAndTris(){GameObject[] objs = Selection.gameObjects;int verts1 = 0, tris1 = 0, verts2 = 0, tris2 = 0;foreach(GameObject obj in objs){MeshFilter[] filters = obj.GetComponentsInChildren<MeshFilter>();foreach(MeshFilter filter in filters){tris1 += filter.sharedMesh.triangles.Length;verts1 += filter.sharedMesh.vertexCount;}SkinnedMeshRenderer[] renders = obj.GetComponentsInChildren<SkinnedMeshRenderer>();foreach(SkinnedMeshRenderer render in renders){tris2 += render.sharedMesh.triangles.Length;verts2 += render.sharedMesh.vertexCount;}}tris1 /= 3;tris2 /= 3;verts = verts1 + verts2;tris = tris1 + tris2;Debug.Log(string.Format("verts: {0}+{1}={2}; tris: {3}+{4}={5}",verts1,verts2,verts,tris1,tris2,tris));}private void OnGUI(){if(active)GUILayout.Label(string.Format("verts: {0}; tris: {1}",verts,tris),textStyle);}
}#endif

这篇关于【UnityEditor】查看模型Mesh面数/顶点数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/365733

相关文章

Java领域模型示例详解

《Java领域模型示例详解》本文介绍了Java领域模型(POJO/Entity/VO/DTO/BO)的定义、用途和区别,强调了它们在不同场景下的角色和使用场景,文章还通过一个流程示例展示了各模型如何协... 目录Java领域模型(POJO / Entity / VO/ DTO / BO)一、为什么需要领域模

深入理解Redis线程模型的原理及使用

《深入理解Redis线程模型的原理及使用》Redis的线程模型整体还是多线程的,只是后台执行指令的核心线程是单线程的,整个线程模型可以理解为还是以单线程为主,基于这种单线程为主的线程模型,不同客户端的... 目录1 Redis是单线程www.chinasem.cn还是多线程2 Redis如何保证指令原子性2.

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

Linux中查看操作系统及其版本信息的多种方法

《Linux中查看操作系统及其版本信息的多种方法》在服务器运维或者部署系统中,经常需要确认服务器的系统版本、cpu信息等,在Linux系统中,有多种方法可以查看操作系统及其版本信息,以下是一些常用的方... 目录1. lsb_pythonrelease 命令2. /etc/os-release 文件3. h

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

MySQL的触发器全解析(创建、查看触发器)

《MySQL的触发器全解析(创建、查看触发器)》MySQL触发器是与表关联的存储程序,当INSERT/UPDATE/DELETE事件发生时自动执行,用于维护数据一致性、日志记录和校验,优点包括自动执行... 目录触发器的概念:创建触www.chinasem.cn发器:查看触发器:查看当前数据库的所有触发器的定

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务