Я думаю, что вы говорите о дескрипторах .
В документах приведены примеры их использования, например: Handles.PositionHandle , Handles.RotationHandle и Handles.ScaleHandle .
Обычно их следует использовать в OnSceneGUI .
Vector3 newPosition = Handles.PositionHandle(currentPosition, Quaternion.identity);
Quaternion newRotation = RotationHandle(currentRotation, position);
Vector3 newScale = ScaleHandle(currentScale, position, rotation, handleSize);
Однако я бы всегдарекомендуется использовать правильное SerializedProperty
, чтобы избежать проблем с отменой / повторением и пометкой «грязные» + сохранение и т. д.
Просто пример (это не переопределит дескрипторы преобразования по умолчанию, поэтомуможет запутаться)
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(Transform), true, isFallback = false)]
public class TransformEditor : Editor
{
private SerializedProperty position;
private SerializedProperty rotation;
private SerializedProperty scale;
private void OnEnable()
{
position = serializedObject.FindProperty("m_LocalPosition");
rotation = serializedObject.FindProperty("m_LocalRotation");
scale = serializedObject.FindProperty("m_LocalScale");
}
private void OnSceneGUI()
{
serializedObject.Update();
position.vector3Value = Handles.PositionHandle(position.vector3Value, Quaternion.identity);
rotation.quaternionValue = Handles.RotationHandle(rotation.quaternionValue, position.vector3Value);
scale.vector3Value = Handles.ScaleHandle(scale.vector3Value, position.vector3Value, rotation.quaternionValue, 1);
serializedObject.ApplyModifiedProperties();
}
}