Для отображения и редактирования точек типа 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. Вы можете выбрать наиболее подходящий под свои потребности, а также настроить визуализацию и взаимодействие точек в соответствии с вашими требованиями.