Объявление
public static Vector3 FreeMoveHandle(Vector3 position, Quaternion rotation, float size, Vector3 snap, Handles.CapFunction capFunction);public static Vector3 FreeMoveHandle(int controlID, Vector3 position, Quaternion rotation, float size, Vector3 snap, Handles.CapFunction capFunction);
Параметры
position | Положение ручки в пространстве Handles.matrix. |
rotation | Вращение ручки в пространстве Handles.matrix. |
size | Размер дескриптора в пространстве Handles.matrix. Используйте HandleUtility.GetHandleSize, если вам нужен постоянный размер экранного пространства. |
snap | Приращение привязки по всем осям. См. раздел Handles.SnapValue. |
capFunction | Функция для вызова фактического рисования. |
controlID | Идентификатор элемента управления для дескриптора. |
Возвращает
Vector3 Новое значение, измененное взаимодействием пользователя с дескриптором. Если пользователь не перемещал дескриптор, он вернет то же значение, которое вы передали в функцию.
Описание
Создаёт неограниченный маркер перемещения.
Эта ручка может свободно перемещаться во всех направлениях. Удерживайте нажатой клавишу Ctrl (Cmd в macOS), чтобы привязаться к сетке (см. Позиционирование игровых объектов). Удерживайте Ctrl-Shift (Cmd-Shift в macOS), чтобы привязать объект к любой поверхности коллайдера под указателем мыши.

Добавьте следующий скрипт в папку Assets как FreeMoveHandleExample.cs и добавьте компонент FreeMoveHandleExample к объекту в сцене.
using UnityEngine;
[ExecuteInEditMode]
public class FreeMoveHandleExample : 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 как FreeMoveHandleExampleEditor.cs и выберите объект с компонентом FreeMoveHandleExample.
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(FreeMoveHandleExample)), CanEditMultipleObjects]
public class FreeMoveHandleExampleEditor : Editor
{
protected virtual void OnSceneGUI()
{
FreeMoveHandleExample example = (FreeMoveHandleExample)target;
float size = HandleUtility.GetHandleSize(example.targetPosition) * 0.5f;
Vector3 snap = Vector3.one * 0.5f;
EditorGUI.BeginChangeCheck();
Vector3 newTargetPosition = Handles.FreeMoveHandle(example.targetPosition, Quaternion.identity, size, snap, Handles.RectangleHandleCap);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(example, "Change Look At TargetPosition");
example.targetPosition = newTargetPosition;
example.Update();
}
}
}