【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

相关文章

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

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

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法

《Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法》在Linux系统中,管理磁盘设备和分区是日常运维工作的重要部分,而lsblk命令是一个强大的工具,它用于列出系统中的块设备(blockde... 目录1. 查看所有磁盘的物理信息方法 1:使用 lsblk(推荐)方法 2:使用 fdisk -l(

MySQL查看表的最后一个ID的常见方法

《MySQL查看表的最后一个ID的常见方法》在使用MySQL数据库时,我们经常会遇到需要查看表中最后一个id值的场景,无论是为了调试、数据分析还是其他用途,了解如何快速获取最后一个id都是非常实用的技... 目录背景介绍方法一:使用MAX()函数示例代码解释适用场景方法二:按id降序排序并取第一条示例代码解

查看MySql主从同步的偏移量方式

《查看MySql主从同步的偏移量方式》:本文主要介绍查看MySql主从同步的偏移量方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 1.mysql的主从同步方案mysqlphp为了在实现读写分离,主库写,从库读mysql的同步方案主要是通过从库读取主库的binl

一文详解如何查看本地MySQL的安装路径

《一文详解如何查看本地MySQL的安装路径》本地安装MySQL对于初学者或者开发人员来说是一项基础技能,但在安装过程中可能会遇到各种问题,:本文主要介绍如何查看本地MySQL安装路径的相关资料,需... 目录1. 如何查看本地mysql的安装路径1.1. 方法1:通过查询本地服务1.2. 方法2:通过MyS

查看MySQL数据库版本的四种方法

《查看MySQL数据库版本的四种方法》查看MySQL数据库的版本信息可以通过多种方法实现,包括使用命令行工具、SQL查询语句和图形化管理工具等,以下是详细的步骤和示例代码,需要的朋友可以参考下... 目录方法一:使用命令行工具1. 使用 mysql 命令示例:方法二:使用 mysqladmin 命令示例:方

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA