MeshInfo

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
(Removing all content from page)
m (Reverted edits by Joseph05408 (Talk); changed back to last version by Silmaril)
Line 1: Line 1:
 +
[[Category: Wizard]]
 +
[[Category: ScriptableObject]]
 +
[[Category: C Sharp]]
 +
[[Category: Selection]]
 +
[[Category: MeshFilter]]
 +
[[Category: Mesh]]
 +
Author: Jonathan Czeck (aarku)
 +
==Description==
 +
This script will show statistics of the meshes in the current selection.  If a parent object is selected, the script will show statistics of the parent's entire hierarchy.
  
 +
==Usage==
 +
Place this script in ''YourProject/Assets/Editor/MeshInfo.cs'' and a menu item will automatically appear in the Custom menu after it is compiled.  Then select any number of objects and select the menu item to see triangle and vertex info.
 +
 +
==C# - MeshInfo.cs==
 +
<csharp>using UnityEngine;
 +
using UnityEditor;
 +
using System.Collections;
 +
 +
public class MeshInfo : ScriptableObject
 +
 +
    [MenuItem ("Custom/Show Mesh Info %#i")]
 +
    public static void ShowCount()
 +
    {
 +
        int triangles = 0;
 +
        int vertices = 0;
 +
        int meshCount = 0;
 +
       
 +
        foreach (GameObject go in Selection.GetFiltered(typeof(GameObject), SelectionMode.TopLevel))
 +
        {
 +
            Component[] skinnedMeshes = go.GetComponentsInChildren(typeof(SkinnedMeshRenderer)) ;
 +
            Component[] meshFilters = go.GetComponentsInChildren(typeof(MeshFilter));
 +
 +
            ArrayList totalMeshes = new ArrayList(meshFilters.Length + skinnedMeshes.Length);
 +
 +
            for (int meshFiltersIndex = 0; meshFiltersIndex < meshFilters.Length; meshFiltersIndex++)
 +
            {
 +
                MeshFilter meshFilter = (MeshFilter)meshFilters[meshFiltersIndex];
 +
                totalMeshes.Add(meshFilter.sharedMesh);
 +
            }
 +
 +
            for (int skinnedMeshIndex = 0; skinnedMeshIndex < skinnedMeshes.Length; skinnedMeshIndex++)
 +
            {
 +
                SkinnedMeshRenderer skinnedMeshRenderer = (SkinnedMeshRenderer)skinnedMeshes[skinnedMeshIndex];
 +
                totalMeshes.Add(skinnedMeshRenderer.sharedMesh);
 +
            }
 +
 +
            for (int i = 0; i < totalMeshes.Count; i++)
 +
            {
 +
                Mesh mesh = (Mesh)totalMeshes[i];
 +
                vertices += mesh.vertexCount;
 +
                triangles += mesh.triangles.Length / 3;
 +
                meshCount++;
 +
            }
 +
        }
 +
 +
        EditorUtility.DisplayDialog("Vertex and Triangle Count", vertices
 +
            + " vertices in selection.  " + triangles + " triangles in selection.  "
 +
            + meshCount + " meshes in selection." + (meshCount > 0 ? ("  Average of " + vertices / meshCount
 +
            + " vertices and " + triangles / meshCount + " triangles per mesh.") : ""), "OK", "");
 +
    }
 +
   
 +
    [MenuItem ("Custom/Show Mesh Info %i", true)]
 +
    public static bool ValidateShowCount()
 +
    {
 +
        return Selection.activeGameObject;
 +
    }
 +
   
 +
}
 +
</csharp>

Revision as of 19:03, 19 October 2009

Author: Jonathan Czeck (aarku)

Description

This script will show statistics of the meshes in the current selection. If a parent object is selected, the script will show statistics of the parent's entire hierarchy.

Usage

Place this script in YourProject/Assets/Editor/MeshInfo.cs and a menu item will automatically appear in the Custom menu after it is compiled. Then select any number of objects and select the menu item to see triangle and vertex info.

C# - MeshInfo.cs

<csharp>using UnityEngine; using UnityEditor; using System.Collections;

public class MeshInfo : ScriptableObject {

   [MenuItem ("Custom/Show Mesh Info %#i")]
   public static void ShowCount()
   {
       int triangles = 0;
       int vertices = 0;
       int meshCount = 0;
       
       foreach (GameObject go in Selection.GetFiltered(typeof(GameObject), SelectionMode.TopLevel))
       {
           Component[] skinnedMeshes = go.GetComponentsInChildren(typeof(SkinnedMeshRenderer)) ;
           Component[] meshFilters = go.GetComponentsInChildren(typeof(MeshFilter));
           ArrayList totalMeshes = new ArrayList(meshFilters.Length + skinnedMeshes.Length);
           for (int meshFiltersIndex = 0; meshFiltersIndex < meshFilters.Length; meshFiltersIndex++)
           {
               MeshFilter meshFilter = (MeshFilter)meshFilters[meshFiltersIndex];
               totalMeshes.Add(meshFilter.sharedMesh);
           }
           for (int skinnedMeshIndex = 0; skinnedMeshIndex < skinnedMeshes.Length; skinnedMeshIndex++)
           {
               SkinnedMeshRenderer skinnedMeshRenderer = (SkinnedMeshRenderer)skinnedMeshes[skinnedMeshIndex];
               totalMeshes.Add(skinnedMeshRenderer.sharedMesh);
           }
           for (int i = 0; i < totalMeshes.Count; i++)
           {
               Mesh mesh = (Mesh)totalMeshes[i];
               vertices += mesh.vertexCount;
               triangles += mesh.triangles.Length / 3;
               meshCount++;
           }
       }
       EditorUtility.DisplayDialog("Vertex and Triangle Count", vertices
           + " vertices in selection.  " + triangles + " triangles in selection.  "
           + meshCount + " meshes in selection." + (meshCount > 0 ? ("  Average of " + vertices / meshCount
           + " vertices and " + triangles / meshCount + " triangles per mesh.") : ""), "OK", "");
   }
   
   [MenuItem ("Custom/Show Mesh Info %i", true)]
   public static bool ValidateShowCount()
   {
       return Selection.activeGameObject;
   }
   

} </csharp>

Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox