Handles.PositionHandle
Declaration
public static Vector3 PositionHandle(Vector3 position, Quaternion rotation);public static Vector3 PositionHandle(Handles.PositionHandleIds ids, Vector3 position, Quaternion rotation);Параметры
| Параметр | Описание |
|---|---|
| должность | Центр ручки в пространстве 3D. |
| ротация | Ориентация ручки в 3D пространстве. |
| Идентификационные номера | Управление IDs ручек. Используйте PositionHandleIds.default. |
Возвращаемое значение
Vector3 Новое значение, изменённое взаимодействием пользователя с handle. Если пользователь не переместил handle, то оно возвратит то же значение, которое вы передали функции.
Описание
Сделайте позиционную ручку.
Этот манипулятор ведет себя как встроенный инструмент перемещения в Unity.
Манипулятор позиционирования в представлении Scene.''
Добавьте следующий скрипт в папку Assets как PositionHandleExample.cs и добавьте компонент PositionHandleExample к объекту в Scene.
using UnityEngine;
[ExecuteInEditMode] public class PositionHandleExample : 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 как PositionHandleExampleEditor.cs и выберите объект с компонентом PositionHandleExample.
using UnityEditor; using UnityEngine;
[CustomEditor(typeof(PositionHandleExample)), CanEditMultipleObjects] public class PositionHandleExampleEditor : Editor { protected virtual void OnSceneGUI() { PositionHandleExample example = (PositionHandleExample)target;
EditorGUI.BeginChangeCheck(); Vector3 newTargetPosition = Handles.PositionHandle(example.targetPosition, Quaternion.identity); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(example, "Change Look At Target Position"); example.targetPosition = newTargetPosition; example.Update(); } } }