效果
首先来看看实现的效果:
前言
需要包含动态画线功能、定义线宽度、线的颜色、和自定义测距的长度单位等功能。根据两个点的位置信息计算距离信息,动态的设置LineRenderer线的位置,将两点连接。动态创建Standard着色器的材质球,并将材质赋值给线,这样通过修改这个材质球颜色可以自定义线的颜色。
实现
显示距离
距离的计算采用Vector3.Distance即可完成,用动态的TextMeshPro来显示长度。
动态创建TextMeshPro:
void CreateTm()
{
Transform tram = transform.Find("tm");
if (tram != null)
tm = tram.GetComponent<TextMeshPro>();
if (tm == null)
{
tm = new GameObject("tm").AddComponent<TextMeshPro>();
tm.color = Color.white;
tm.fontSize = 4;
tm.transform.SetParent(this.transform);
tm.GetComponent<RectTransform>().sizeDelta = new Vector2(2, 1);
tm.alignment = TextAlignmentOptions.Center;
}
}
创建线条
void CreateLine()
{
line = gameObject.GetComponent<LineRenderer>();
if (line == null)
line = gameObject.AddComponent<LineRenderer>();
line.material = LineMat;
}
绘制线和更新信息
代码如下:
if (tm == null)
CreateTm();
if (line == null)
CreateLine();
tm.text = (Vector3.Distance(StObj.transform.position, EdObj.transform.position) * (int)unittype).ToString("F1") + unittype;
tm.transform.position = (StObj.transform.position + EdObj.transform.position) / 2;
line.SetPositions(new Vector3[] { StObj.transform.position, EdObj.transform.position });
line.SetWidth(LineWidth, LineWidth);
LineMat.color = LineColor;
没有线条或者TextMesh会进行创建,之后就是进行动态的绘制线条。
单位转换
定义了单位的枚举和值:
public enum UnitType
{
mm = 1000, //毫米
cm = 100, //厘米
dm = 10, //分米
M = 1, //米
}
将值乘以距离的值,并更新一下随后的单位。
非实时绘制
在使用的过程中发现实时的绘制情况下,在线增多很多的情况下特别卡顿,因此,新增了实时绘制的选项,和添加了开始绘制的按钮。
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
[ExecuteInEditMode]
[CustomEditor(typeof(Line))]
public class LineEditor : Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
Line sp = (Line)target;
if (GUILayout.Button("开始绘线"))
sp.DrawLineInfo();
}
}
# endif
新增画线菜单选项
看之前的效果,发现新增线段可以通过菜单项进行增加,这个功能主要使用MenuItem,将制作好的预设线,添加至场景即可
[MenuItem("画线测距/新增画线")]
static void AddLine() {
GameObject Line = Resources.Load("Line") as GameObject;
if (Line == null) {
Debug.LogError("Line预设丢失!");
return;
}
GameObject NewLine = Instantiate(Line) as GameObject;
NewLine.name = "New Line";
Debug.Log("新增画线完成!");
}
线条设置选项:
项目源码
https://download.csdn.net/download/qq_33789001/19822089