Unity 6.3
0 онлайн 1 гость 3 в системе
Вход

Handles.FreeMoveHandle

Declaration

public static Vector3 FreeMoveHandle(Vector3 position, float size, Vector3 snap, Handles.CapFunction capFunction);
public static Vector3 FreeMoveHandle(int controlID, Vector3 position, float size, Vector3 snap, Handles.CapFunction capFunction);

Параметры

Параметр Описание
должность Положение ручки в пространстве Handles.matrix.
размер Размер ручки в пространстве Handles.matrix. Используйте HandleUtility.GetHandleSize, если требуется постоянный размер экранного пространства.
взлом Увеличение прижатия по всем осям. См. Handles.SnapValue.
capFunction Функция для вызова для выполнения фактического рисунка.
controlID Управление ID для ручки.

Возвращаемое значение

Vector3 Новое значение, изменённое взаимодействием пользователя с handle. Если пользователь не переместил handle, то оно возвратит то же значение, которое вы передали функции.

Описание

Сделайте ручку свободного движения.

Эта ручка может свободно перемещаться во всех направлениях. Удерживайте нажатой клавишу Ctrl (Cmd на macOS), чтобы прикрепить ее к сетке (см. PositioningGameObjects). Удерживайте нажатой клавишу Ctrl-Shift (Cmd-Shift на macOS), чтобы прикрепить объект к любой поверхности Collider под указателем мыши.


Свободное перемещение ручки в представлении Scene.

Добавьте следующий скрипт в папку Assets как FreeMoveHandleExample.cs и добавьте компонент FreeMoveHandleExample к объекту в Scene.

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, size, snap, Handles.RectangleHandleCap); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(example, "Change Look At Target Position"); example.targetPosition = newTargetPosition; example.Update(); } } }