美文网首页Unity教程合集unity3D技术分享
Unity3D中如何计算场景中的三角面和顶点数

Unity3D中如何计算场景中的三角面和顶点数

作者: Zander_zhang | 来源:发表于2017-01-24 14:35 被阅读0次

在做游戏开发时,场景中的三角面和顶点数影响着运行效率,尤其是在手机平台上,实时的知道场景中的各项指标,对性能优化来说至关重要,下面我们来实现一个小功能,来实时计算场景中的三角面和顶点数;

如果要知道场景中的三角面和顶点数,首先我们要得到场景中所有的物体,如下:

GameObject[] ob = FindObjectsOfType(typeof(GameObject)) as GameObject[];

其次,在我们得到的这些Gameobject中,有的含有MeshFilter 有的不含有,我们要得到这些物体中哪些包含MeshFilter,所以:

Component[] filters;

filters = obj.GetComponentsInChildren();

然后我们再在这些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);jiex

string 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 initialization

void Start () {

f_LastInterval = Time.realtimeSinceStartup;

}

///

/// 得到场景中所有的GameObject

///

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();

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 frame

void Update()

{

if (Time.realtimeSinceStartup > f_LastInterval + f_UpdateInterval)

{

f_LastInterval = Time.realtimeSinceStartup;

GetAllObjects();

}

}

}

好了,这一章就写到这,欢迎大家加入QQ群:280993838  或者关注我的公众号:

相关文章

  • Unity3D中如何计算场景中的三角面和顶点数

    在做游戏开发时,场景中的三角面和顶点数影响着运行效率,尤其是在手机平台上,实时的知道场景中的各项指标,对性能优化来...

  • IEEE浮点数表示

    该文主要介绍一个浮点数在计算机中的表示,属于很底层的知识点 介绍计算机如何表示浮点数之前,先了解一下日常生活中,我...

  • Metal 案例03:大批量顶点数据的图形渲染

    本案例的目的在于理解顶点数据的两种存储方式以及它们的区别和应用场景 在Metal 案例02:加载三角形案例中,顶点...

  • 守望传说

    物品价值计算 直接依据:路线图活动中对应的活动点数和商店。 800 活动点数 = 1洗练石 = 10进化石 = 5...

  • Unity3d 自动加载场景

    在Unity3d中,场景(scene)多半通过在build settings中点击add current或者把场景...

  • 最完美的浮点数计算

    浮点型计算 在JavaScript中,整数和浮点数都属于Number类型,它们都统一采用64位浮点数进行存储。 虽...

  • Unity 3D 音效实现

    引子 最近项目有用到场景音效稍微研究了下在Unity中该如何实现3D音效的效果 前提 基于 Unity3d 5.4...

  • JS中为什么0.1+02!=0.3?

    为什么0.1+0.2===0.3? 计算机中数字的存储方式 在计算机中数字无论是定点数还是浮点数都是以多位二进制的...

  • 点滴笔记(2018年08月24日更新)

    问:浮点数为什么存在精度问题? 计算机中的浮点数对应于数学当中的小数。简单计算下,32位浮点数最多可以表示2^32...

  • 定点数和浮点数

    在计算机中的数据有定点数和浮点数两种表示方式。 1.定点数 小数点固定在某个位置上的数据 2.浮点数 小数点位置可...

网友评论

    本文标题:Unity3D中如何计算场景中的三角面和顶点数

    本文链接:https://www.haomeiwen.com/subject/dmvzbttx.html