Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Handles.FreeMoveHandle

Объявление

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(); } } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3