[引擎]之二:unity中查看简单mesh顶点顺序的小工具

本文介绍了一个用于Unity3D的自定义工具,该工具能够帮助开发者查看3D模型(mesh)的顶点顺序及UV坐标。通过简单的脚本实现,此工具可以方便地展示模型的顶点信息,适用于验证3D模型导入和编辑后的顶点排列是否正确。

因为要在Unity3d中检验在《3D游戏编程大师技巧》中学习到的东西,写了一个查看简单mesh的顶点顺序的小工具。
效果如下(当前也可以将uv坐标等其他信息加入到显示中):
工具效果

工具创建步骤:

  1. 创建一个脚本,读取mesh中的顶点列表
using UnityEngine;
using System.Collections.Generic;
namespace YanCheZuo
{
    [RequireComponent(typeof(MeshFilter))]
    public class TestMeshViewer : MonoBehaviour
    {
        private MeshFilter _meshFilter;
        private Mesh _mesh;

        public List<Vector3> verticesList = new List<Vector3>();
        public List<Vector2> uvList = new List<Vector2>();
        public List<int> triList = new List<int>();

        private void Start()
        {
            _meshFilter = this.GetComponent<MeshFilter>();
            _mesh = _meshFilter.mesh;

            ReadMeshInfo();

        }
        private void ReadMeshInfo()
        {

            for (int i = 0, imax = _mesh.vertexCount; i < imax; ++i)
            {
                verticesList.Add(_mesh.vertices[i]);
                uvList.Add(_mesh.uv[i]);
            }

            for (int i = 0, imax = _mesh.triangles.Length; i < imax; ++i)
            {
                triList.Add(_mesh.triangles[i]);
            }
        }
    }
}
  1. 创建编辑器脚本,在Scene中绘制顶点顺序
using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
using System.Text;
namespace YanCheZuo
{
    [CustomEditor(typeof(TestMeshViewer))]
    public class MeshViewerEditor : Editor
    {
        private void OnSceneGUI()
        {
            GUIStyle style = new GUIStyle();
            style.normal.textColor = Color.red;
            TestMeshViewer viewer = target as TestMeshViewer;
            Dictionary<Vector3, StringBuilder> posList=new Dictionary<Vector3, StringBuilder>();

            for (int i = 0, imax = viewer.verticesList.Count; i < imax; ++i)
            {
                Vector3 vPos = viewer.transform.TransformPoint(viewer.verticesList[i]);

                StringBuilder sb;
                if (posList.TryGetValue(vPos, out sb))
                {
                    sb.AppendLine("index:" + i);
                }
                else
                {
                    sb = new StringBuilder();
                    sb.AppendLine("index" + i);
                    posList.Add(vPos, sb);

                }

                Handles.Label(vPos, sb.ToString(),style);
            }
        }
    }
}
  • 使用方法:
    把TestMeshViewer挂到有MeshFilter组件的GameObject上。
<think>好的,我现在需要帮助用户解决在Unity查看模型顶点序号的问题。首先,用户的需求很明确,他们想知道如何在Unity查看模型的顶点序号。根据用户提供的引用内容,特别是引用[2]、[3]和[4],这些内容提到了Unity中的网格结构、顶点和三角面的创建,以及查看顶点顺序小工具。 首先,我应该回顾一下Unity的基本概念。网格(Mesh)由顶点和三角形组成,每个顶点有位置、法线、UV等属性。用户想要查看这些顶点的序号,也就是每个顶点顶点数组中的索引。这在调试或自定义网格生成时非常有用。 根据引用[2],Unity中的网格必须包含顶点和三角形信息,而引用[3]提到有一个小工具可以查看顶点顺序,这可能涉及到自定义编辑器脚本。引用[4]讨论了顶点和三角形数据的关系,说明顶点序号对于理解三角面如何连接顶点至关重要。 接下来,我需要考虑用户可能的操作环境。用户可能使用的是Unity编辑器,可能需要通过编辑器扩展或者现有的工具查看顶点序号。引用[3]提到的小工具可能需要用户自己编写脚本,或者在Unity Asset Store中找到相关工具。 首先,我应该建议用户使用Unity内置的功能。例如,在Scene视图中选择网格,但默认情况下可能不会显示顶点序号。这时需要安装Editor插件,或者编写自定义的Gizmos绘制脚本。引用[3]中的代码示例可能是一个起点,但需要检查是否与当前Unity版本兼容。 另外,引用[4]中的博客可能提供了详细的方法,比如通过代码遍历顶点数组并打印出来,或者在OnDrawGizmos方法中绘制顶点序号。需要确保用户了解如何编写这样的脚本,并附加到Mesh Filter或Skinned Mesh Renderer组件上。 用户可能需要分步骤的指导,包括如何创建编辑器脚本、如何显示Gizmos,以及如何调试顶点数据。同时,需要注意性能问题,因为实时绘制大量顶点序号可能会影响编辑器性能,所以建议仅在需要时启用。 还需要考虑用户可能遇到的问题,比如顶点数量过多导致显示混乱,或者如何区分不同的子网格。引用[3]提到的兼容顶点和UV数量不同的情况,可能需要脚本处理数组长度不一致的问题。 最后,应该总结几种方法,包括使用内置工具、编写编辑器脚本以及参考外部资源,确保用户有多种选择。同时,生成相关问题可以帮助用户进一步学习,比如如何修改顶点数据或优化网格性能。</think>在Unity查看模型顶点序号可通过以下四种方法实现: ### 方法一:使用MeshInfo工具(推荐) 1. 安装Unity官方提供的`Mesh Info`工具 2. 在编辑器菜单选择:Window > Analysis > Mesh Info 3. 选中场景中的网格对象 4. 查看工具面板中的顶点索引数据 ![Mesh Info工具界面示例][^4] ### 方法二:自定义Gizmos绘制 ```csharp [RequireComponent(typeof(MeshFilter))] public class VertexIndexDisplay : MonoBehaviour { void OnDrawGizmosSelected() { Mesh mesh = GetComponent<MeshFilter>().sharedMesh; if (mesh == null) return; for(int i=0; i<mesh.vertices.Length; i++){ Vector3 pos = transform.TransformPoint(mesh.vertices[i]); UnityEditor.Handles.Label(pos, i.ToString()); } } } ``` 将此脚本附加到包含MeshFilter的物体上,选中物体即可看到顶点序号[^3][^4] ### 方法三:通过模型导入设置 1. 在Project窗口选择模型文件 2. 在Inspector面板选择Rig标签 3. 将Animation Type设置为Humanoid 4. 点击Configure按钮进入网格详情视图 5. 使用顶点选择工具查看具体序号 ### 方法四:程序化输出 ```csharp void Start(){ Mesh mesh = GetComponent<MeshFilter>().mesh; for(int i=0; i<mesh.vertices.Length; i++){ Debug.Log($"顶点{i}坐标:{mesh.vertices[i]}"); } } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

延澈左

小小心意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值