https://blog.csdn.net/yanchezuo/article/details/78978884
1 添加查看顶点位置和uv信息
2 兼容顶点数量和uv数量不同的情况
3 添加是否显示信息的选项
4 完整代码
5 最后
这里制作的小工具,功能有点单薄,只能查看顶点的顺序。
在写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);
}
1
2
3
4
5
6
7
8
9
10
11
12
(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]);
}
}
1
2
3
4
5
6
7
8
嗯,完成了,看一下运行效果:
(3) 添加是否显示信息的选项
有时候,希望只看顶点信息或者uv信息什么的,不要全部显示。
所以,在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");
}
1
2
3
4
5
6
7
8
9
10
11
12
然后使用这几个布尔值就可以了。
(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]);
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
只看index和uv效果:
(5) 最后
生产工具决定生产力。定制工具比不可少。之后还会根据需要进行工具的更新。
积跬步以至千里。
以上。
---------------------
作者:延澈左
来源:CSDN
原文:https://blog.csdn.net/yanchezuo/article/details/78978884
版权声明:本文为博主原创文章,转载请附上博文链接!