Объявление
public static Vector3 Slider2D(int id, Vector3 handlePos, Vector3 offset, Vector3 handleDir, Vector3 slideDir1, Vector3 slideDir2, float handleSize, Handles.CapFunction capFunction, Vector2 snap, bool drawHelper = false);public static Vector3 Slider2D(Vector3 handlePos, Vector3 handleDir, Vector3 slideDir1, Vector3 slideDir2, float handleSize, Handles.CapFunction capFunction, float snap, bool drawHelper = false);
public static Vector3 Slider2D(int id, Vector3 handlePos, Vector3 handleDir, Vector3 slideDir1, Vector3 slideDir2, float handleSize, Handles.CapFunction capFunction, Vector2 snap, bool drawHelper = false);
public static Vector3 Slider2D(Vector3 handlePos, Vector3 handleDir, Vector3 slideDir1, Vector3 slideDir2, float handleSize, Handles.CapFunction capFunction, Vector2 snap, bool drawHelper = false);
Параметры
id | (необязательно) переопределить ControlID по умолчанию для этого экземпляра Slider2D. |
handlePos | Положение текущей точки в пространстве Handles.matrix. |
offset | (необязательно) отображает Slider2D в handlePos, но обрабатывает начало Slider2D как handlePos + смещение. Полезно для экземпляров Slider2D, которые размещаются/отрисовываются относительно другого объекта или ручки. |
handleDir | Направление ручки в пространстве Handles.matrix, используемое только для визуализации ручки. |
slideDir1 | Первая ось плоскости перемещения ползунка в пространстве Handles.matrix. |
slideDir2 | Вторая ось плоскости перемещения ползунка в пространстве Handles.matrix. |
handleSize | Размер дескриптора в пространстве Handles.matrix. Используйте HandleUtility.GetHandleSize, если вам нужен постоянный размер экранного пространства. |
snap | (с плавающей запятой или Vector2) Шаг привязки по обеим осям, равномерный или по осям. См. раздел Handles.SnapValue. |
drawHelper | (по умолчанию: false) отображать прямоугольник вокруг маркера при перетаскивании. |
capFunction | Функция для вызова фактического рисования. |
Возвращает
Vector3 Новое значение, измененное взаимодействием пользователя с дескриптором. Если пользователь не перемещал дескриптор, он вернет значение позиции, переданное в функцию.
Описание
Создаёт 3D-ползунок, который перемещается по плоскости, определяемой двумя осями.
Этот метод рисует на экране 3D-манипулятор, который можно перетаскивать. Ручка ограничена перемещением по плоскости в трехмерном пространстве.

Добавьте следующий скрипт в папку Assets как Slider2DExample.cs и добавьте компонент Slider2DExample к объекту в сцене.
using UnityEngine;
[ExecuteInEditMode]
public class Slider2DExample : MonoBehaviour
{
public Vector3 targetPosition { get { return m_TargetPosition; } set { m_TargetPosition = value; } }
[SerializeField]
private Vector3 m_TargetPosition = new Vector3(1f, 0f, 2f);
public virtual void Update()
{
transform.LookAt(m_TargetPosition);
}
}
Добавьте следующий скрипт в Assets/Editor как Slider2DExampleEditor.cs и выберите объект с компонентом Slider2DExample.
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(Slider2DExample)), CanEditMultipleObjects]
public class Slider2DExampleEditor : Editor
{
protected virtual void OnSceneGUI()
{
Slider2DExample example = (Slider2DExample)target;
float size = HandleUtility.GetHandleSize(example.targetPosition) * 0.5f;
float snap = 0.1f;
Vector3 handleDirection = Vector3.up;
EditorGUI.BeginChangeCheck();
Vector3 newTargetPosition = Handles.Slider2D(example.targetPosition, handleDirection, Vector3.right, Vector3.forward, size, Handles.CircleHandleCap, snap);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(example, "Change Look At TargetPosition");
example.targetPosition = newTargetPosition;
example.Update();
}
}
}