Как реализовать отображение и редактирование точек типа вектор3 на сцене?

Для отображения и редактирования точек типа Vector3 на сцене в Unity можно использовать различные способы. Рассмотрим несколько возможных подходов.

Первый способ — использование готового инструмента Unity — Gizmos. Gizmos позволяют рисовать на сцене различные формы и фигуры для визуализации объектов. Для отображения и редактирования точек типа Vector3 можно создать собственный скрипт компонента и определить в нем метод OnDrawGizmosSelected. В этом методе можно выполнить отрисовку и редактирование точек с помощью методов класса Gizmos. Например:

using UnityEngine;

public class PointsManager : MonoBehaviour
{
    public Vector3[] points;

    private void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.red;
        foreach (Vector3 point in points)
        {
            Gizmos.DrawSphere(point, 0.1f);
        }
    }
}

В этом примере создается массив точек типа Vector3 и отображаются красными сферами на сцене. Этот массив можно редактировать в инспекторе Unity. Добавьте этот компонент к объекту на сцене и укажите значения точек в инспекторе.

Второй способ — создание собственного редакторского скрипта. Это может быть полезно, если требуется более сложное взаимодействие с точками, например, перемещение или масштабирование. Для этого необходимо создать новый скрипт, наследуемый от UnityEditor.Editor. В этом скрипте можно определить методы OnSceneGUI и OnInspectorGUI, которые будут вызываться в редакторе сцены и инспекторе соответственно.

Пример редакторского скрипта для отображения и редактирования точек:

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(PointsManager))]
public class PointsManagerEditor : Editor
{
    private SerializedProperty pointsProperty;

    private void OnEnable()
    {
        pointsProperty = serializedObject.FindProperty("points");
    }

    public override void OnInspectorGUI()
    {
        serializedObject.Update();

        EditorGUILayout.PropertyField(pointsProperty, true);

        serializedObject.ApplyModifiedProperties();
    }

    private void OnSceneGUI()
    {
        PointsManager pointsManager = (PointsManager)target;

        Handles.color = Color.red;

        for (int i = 0; i < pointsManager.points.Length; i++)
        {
            Vector3 handlePosition = pointsManager.transform.TransformPoint(pointsManager.points[i]);

            EditorGUI.BeginChangeCheck();
            handlePosition = Handles.PositionHandle(handlePosition, Quaternion.identity);
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(pointsManager, "Move Point");
                pointsManager.points[i] = pointsManager.transform.InverseTransformPoint(handlePosition);
            }
        }
    }
}

В этом примере создается редакторское расширение для компонента PointsManager. В инспекторе Unity будут отображаться точки в виде массива, доступного для редактирования. В редакторе сцены точки будут отображаться красными сферами. При перемещении сфер будет обновляться массив точек.

Это лишь некоторые из возможных способов отображения и редактирования точек типа Vector3 на сцене в Unity. Вы можете выбрать наиболее подходящий под свои потребности, а также настроить визуализацию и взаимодействие точек в соответствии с вашими требованиями.