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

13 篇文章 0 订阅

这里制作的小工具,功能有点单薄,只能查看顶点的顺序。
在写CubeMesh的时候,需要查看顶点的位置信息和uv信息。
因此,添加这两个功能:

(1) 添加查看顶点位置和uv信息

MeshViewerEditor中,添加两个方法,来显示顶点位置信息和uv信息。因为目前只会在简单的mesh查看时用到,所以不必太考虑性能什么的,先有再追求。以下是新加的代码:

        // 显示顶点位置Str
        private void AddVerticeStr(ref StringBuilder sb, Vector3 vert)
        {
            sb.Append(",vertice:" + vert);
        }
        // 显示uv信息Str
        private void AddUVStr(ref StringBuilder sb,Vector2 uv)
        {
            sb.Append(",uv:" + uv);
        }

(2) 兼容顶点数量和uv数量不同的情况

在新建Mesh的过程中,先添加顶点,之后才会给每个顶点添加uv坐标。所以,有可能uv坐标的数量和顶点数量不一致。这个时候,兼容一下。修改显示uv信息的方法:

        private void AddUVStr(ref StringBuilder sb, ref List<Vector2> uvList, int index)
        {
            if (uvList.Count > index)
            {
                sb.Append(",uv:" + uvList[index]);
            }
        }

嗯,完成了,看一下运行效果:
运行效果

(3) 添加是否显示信息的选项

有时候,希望只看顶点信息或者uv信息什么的,不要全部显示。
所以,在Inspector中添加是否显示信息的选项,就是这样:
Inspector中的显示
Unity中的Editor类,重写OnInspectorGUI()方法,添加自己想要的选项。代码如下:

        private bool showInfo = true;
        private bool showUV = true;
        private bool showVertice = true;
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            showInfo = GUILayout.Toggle(showInfo, "Show Info");
            showVertice = GUILayout.Toggle(showVertice, "Show Vertice");
            showUV = GUILayout.Toggle(showUV, "Show UV");

        }

然后使用这几个布尔值就可以了。

(4) 完整代码

using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
using System.Text;
namespace YanCheZuo
{
    [CustomEditor(typeof(TestMeshViewer))]
    public class MeshViewerEditor : Editor
    {
        private bool showInfo = true;
        private bool showUV = true;
        private bool showVertice = true;
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            showInfo = GUILayout.Toggle(showInfo, "Show Info");
            showVertice = GUILayout.Toggle(showVertice, "Show Vertice");
            showUV = GUILayout.Toggle(showUV, "Show UV");

        }
        private void OnSceneGUI()
        {
            if (!showInfo)
            {
                return;
            }
            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))
                {
                    StringBuilder str = new StringBuilder("index:" + i);
                    AddVerticeStr(ref str, vPos);
                    AddUVStr(ref str, ref viewer.uvList, i);
                    sb.AppendLine(str.ToString());
                }
                else
                {
                    sb = new StringBuilder();
                    StringBuilder str = new StringBuilder("index:" + i);
                    AddVerticeStr(ref str, vPos);
                    AddUVStr(ref str, ref viewer.uvList, i);
                    sb.AppendLine(str.ToString());
                    posList.Add(vPos, sb);
                }

                Handles.Label(vPos, sb.ToString(), style);
            }
        }

        private void AddVerticeStr(ref StringBuilder sb, Vector3 vert)
        {
            if (!showVertice)
            {
                return;
            }
            sb.Append(",vertice:" + vert);
        }
        private void AddUVStr(ref StringBuilder sb, ref List<Vector2> uvList, int index)
        {
            if (!showUV)
            {
                return;
            }

            if (uvList.Count > index)
            {
                sb.Append(",uv:" + uvList[index]);
            }
        }
    }
}

只看index和uv效果:
index_uv效果

(5) 最后

生产工具决定生产力。定制工具比不可少。之后还会根据需要进行工具的更新。
积跬步以至千里。

以上。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

延澈左

小小心意

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

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

打赏作者

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

抵扣说明:

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

余额充值