美文网首页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中如何计算场景中的三角面和顶点数

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