UEDL8-1——文本、线段、虚线

本章代码关键字

1
2
3
4
5
6
Handles.color                //设置在Scene窗口上绘制内容时使用的颜色,对绘制文字不起作用
Handles.Label() //文本控件,在Scene窗口上绘制文本
Handles.DrawLine() //线段控件,在Scene窗口上绘制线段
Handles.DrawLines() //多段线段控件,在Scene窗口上绘制多段的线段
Handles.DrawDottedLine() //虚线控件,在Scene窗口上绘制虚线
Handles.DrawDottedLines() //多段虚线控件,在Scene窗口上绘制多段的虚线

Editor中的target成员

我们可以利用继承Editor​基类中的target成员获取到拓展的组件对象

例如我们要获取Lesson26​依附的GameObject的位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(Lesson26))]
public class Lesson26Editor : Editor
{
private Lesson26 targetObj;

private void OnEnable()
{
targetObj = target as Lesson26;
}

private void OnSceneGUI()
{
Debug.Log("Scene窗口拓展相关逻辑");
Debug.Log("当前依附对象的位置信息" + targetObj.transform.position);
}
}

Handles中的颜色控制

在调用Handles​中的绘制API之前 可以设置其绘制出来的颜色 Handles.color = new Color(0, 1, 1, 0.3f);

该方法单独执行无效果,需要配合其他方法一起执行才能看出效果,如下面的绘制线段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private Lesson26 targetObj;

private void OnEnable()
{
targetObj = target as Lesson26;
}

private void OnSceneGUI()
{
//设置颜色
Handles.color = new Color(1f, 0f, 0f, 0.5f);
//绘制线段
Handles.DrawLine(targetObj.transform.position, targetObj.transform.position + targetObj.transform.forward * 5);
}

显示效果:

image

Handles中的文本控件

Handles.Label(显示位置, 文本内容);

  • 参数一:显示位置
  • 参数二:显示文本内容(可改为GUIContent
  • 参数三:GUIStyle(可选)

该方法绘制的文本颜色不受Handles.color​设置的影响,如要设置颜色需要使用GUIStyle参数

1
2
3
4
5
6
7
8
9
10
11
12
private Lesson26 targetObj;

private void OnEnable()
{
targetObj = target as Lesson26;
}

private void OnSceneGUI()
{
Handles.Label(Vector3.zero, "测试文本显示(位置固定)");
Handles.Label(targetObj.transform.position, "测试文本显示(跟随目标)");
}

显示效果:

image

Handles中的线段控件

Handles.DrawLine(起点, 终点, 粗细);

  • 参数一:起点
  • 参数二:终点
  • 参数三:线段粗细(可选)

还有一种绘制连接多个点线段的方法Handles.DrawLines()

  • 参数一:点的数组
  • 参数二:表示线段起点和终点的成对索引的列表(可选,不填入则直接将参数一作为线段起点和终点的成对点的数组)

假设要绘制线段方向为对象面朝向,同时长度为5的线段(绘制的线段颜色受到Handles.color设置的影响)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private Lesson26 targetObj;

private void OnEnable()
{
targetObj = target as Lesson26;
}

private void OnSceneGUI()
{
//设置颜色
Handles.color = new Color(0f, 1f, 0f, 1f);
//绘制线段
Handles.DrawLine(targetObj.transform.position, targetObj.transform.position + targetObj.transform.forward * 5, 2);
}

image

Handles中的虚线控件

Handles.DrawDottedLine(起点, 终点, 粗细);

  • 参数一:起点
  • 参数二:终点
  • 参数三:虚线中的线段每一段长度及其间距的大小(以像素为单位)

假设要绘制线段方向为对象面朝向,同时长度为3,虚线每段线段及其间隔为10像素的虚线(绘制的线段颜色受到Handles.color设置的影响)

1
2
3
4
5
6
7
8
9
10
11
12
private Lesson26 targetObj;

private void OnEnable()
{
targetObj = target as Lesson26;
}

private void OnSceneGUI()
{
Handles.color = new Color(0f, 0f, 1f, 1f);
Handles.DrawDottedLine(targetObj.transform.position, targetObj.transform.position + targetObj.transform.forward * 3, 10);
}

显示效果:

image

还有一种绘制连接多个点线段的方法Handles.DrawDottedLines()

  • 参数一:点的数组
  • 参数二:表示线段起点和终点的成对索引的列表(可选,不填入则直接将参数一直接作为线段起点和终点的成对点的数组)
  • 参数三:虚线中的线段每一段长度及其间距的大小(以像素为单位)