Захотелось сделать небольшую рулетку, для измерения расстояния между объектами. Набросал простенький скрипт, задаешь объекты, получаешь расстояние между центрами transform-ов. Захотелось мне отрисовать линию чтобы видеть откуда до куда измерения ведутся. Добавил параметр и отрисовал. Но почему-то сия линия не стирается после отрисовки и висит артефактом когда меняешь объекты или начинаешь их двигать. Подскажите чего не так делаю?
Синтаксис:
Используется csharp
using UnityEngine;
using UnityEditor;
public class SL_Ruler : EditorWindow
{
// Регистрируем пункт меню и функцию, выполняющую открытие окна
[MenuItem("Window/SoftLab/Ruler")]
public static void CreateWindow()
{
SL_Ruler window = GetWindow<SL_Ruler>();
window.title = "Ruler Window";
}
public bool DrawLine = false;
// объект для поворота
public Transform source;
// цель
public Transform target;
void Update()
{
if (DrawLine && (source != null) && (target != null))
{
Debug.DrawLine(source.position, target.position, Color.green);
}
}
// Функция отрисовки окна
public void OnGUI()
{
// поле для указания исходного объекта
DrawLine = GUILayout.Toggle(DrawLine, "Draw line");
GUILayout.Button(GUIContent.none, GUILayout.ExpandWidth(true), GUILayout.Height(3));
GUILayout.BeginHorizontal();
GUILayout.Label("Start:", GUILayout.Width(120));
source = (Transform)EditorGUILayout.ObjectField(source, typeof(Transform));
GUILayout.EndHorizontal();
// поле для указания цели
GUILayout.BeginHorizontal();
GUILayout.Label("End:", GUILayout.Width(120));
target = (Transform)EditorGUILayout.ObjectField(target, typeof(Transform));
GUILayout.EndHorizontal();
// запоминаем текущий цвет GUI для восстановления
Color oldColor = GUI.color;
if ((source != null) && (target != null))
{
GUI.color = Color.green;
GUILayout.Label("Distance : " + Vector3.Distance(source.position, target.position));
//if (DrawLine)
// Debug.DrawLine(source.position, target.position, Color.green);
}
else
{
GUI.color = Color.red;
GUILayout.Label("Set Start and End!");
}
GUI.color = oldColor;
GUI.enabled = true;
GUILayout.Space(8);
}
}
using UnityEditor;
public class SL_Ruler : EditorWindow
{
// Регистрируем пункт меню и функцию, выполняющую открытие окна
[MenuItem("Window/SoftLab/Ruler")]
public static void CreateWindow()
{
SL_Ruler window = GetWindow<SL_Ruler>();
window.title = "Ruler Window";
}
public bool DrawLine = false;
// объект для поворота
public Transform source;
// цель
public Transform target;
void Update()
{
if (DrawLine && (source != null) && (target != null))
{
Debug.DrawLine(source.position, target.position, Color.green);
}
}
// Функция отрисовки окна
public void OnGUI()
{
// поле для указания исходного объекта
DrawLine = GUILayout.Toggle(DrawLine, "Draw line");
GUILayout.Button(GUIContent.none, GUILayout.ExpandWidth(true), GUILayout.Height(3));
GUILayout.BeginHorizontal();
GUILayout.Label("Start:", GUILayout.Width(120));
source = (Transform)EditorGUILayout.ObjectField(source, typeof(Transform));
GUILayout.EndHorizontal();
// поле для указания цели
GUILayout.BeginHorizontal();
GUILayout.Label("End:", GUILayout.Width(120));
target = (Transform)EditorGUILayout.ObjectField(target, typeof(Transform));
GUILayout.EndHorizontal();
// запоминаем текущий цвет GUI для восстановления
Color oldColor = GUI.color;
if ((source != null) && (target != null))
{
GUI.color = Color.green;
GUILayout.Label("Distance : " + Vector3.Distance(source.position, target.position));
//if (DrawLine)
// Debug.DrawLine(source.position, target.position, Color.green);
}
else
{
GUI.color = Color.red;
GUILayout.Label("Set Start and End!");
}
GUI.color = oldColor;
GUI.enabled = true;
GUILayout.Space(8);
}
}
буду рад советам или идеям куда копать