Объявление
public void DrawHandle();Описание
Функция для отображения этого экземпляра в текущей камере дескриптора с использованием его текущей конфигурации.
Всегда записывайте свойства в дескриптор перед вызовом этой функции. Поместите вызовы этой функции в EditorGUI.BeginChangeCheck и EditorGUI.EndChangeCheck, чтобы обнаружить взаимодействие с пользователем и прочитать обновленную информацию. свойства из дескриптора.
Следующий компонент определяет объект со свойством Bounds.
using UnityEngine;
public class BoundsExample : MonoBehaviour
{
public Bounds bounds { get { return m_Bounds; } set { m_Bounds = value; } }
[SerializeField]
private Bounds m_Bounds = new Bounds(Vector3.zero, Vector3.one);
}
Следующий пользовательский редактор позволяет пользователю редактировать свойство границ для этого компонента в представлении "Сцена".
using UnityEditor;
using UnityEditor.IMGUI.Controls;
using UnityEngine;
[CustomEditor(typeof(BoundsExample)), CanEditMultipleObjects]
public class BoundsExampleEditor : Editor
{
private BoxBoundsHandle m_BoundsHandle = new BoxBoundsHandle();
// the OnSceneGUI callback uses the Scene view camera for drawing handles by default
protected virtual void OnSceneGUI()
{
BoundsExample boundsExample = (BoundsExample)target;
// copy the target object's data to the handle
m_BoundsHandle.center = boundsExample.bounds.center;
m_BoundsHandle.size = boundsExample.bounds.size;
// draw the handle
EditorGUI.BeginChangeCheck();
m_BoundsHandle.DrawHandle();
if (EditorGUI.EndChangeCheck())
{
// record the target object before setting new values so changes can be undone/redone
Undo.RecordObject(boundsExample, "Change Bounds");
// copy the handle's updated data back to the target object
Bounds newBounds = new Bounds();
newBounds.center = m_BoundsHandle.center;
newBounds.size = m_BoundsHandle.size;
boundsExample.bounds = newBounds;
}
}
}
Смотрите так же: Editor.OnSceneGUI, Handles.SetCamera.