Описание
Позволяет редактору обрабатывать событие в представлении "Сцена".
В OnSceneGUI можно выполнять, например, редактирование сетки, рисование ландшафта или дополнительные приспособления. Если вызывается Event.current.Use()
, событие будет "съедено" редактором и не будет использоваться самим представлением сцены.
В Следующие два скрипта OnSceneGUI используются для рисования линий между игровыми объектами. Первый скрипт показывает, как используется OnSceneGUI. В этом скрипте в качестве родителя используется игровой объект. Получается позиция родителя, а затем от нее рисуются линии к игровым объектам, хранящимся в массиве. Для этого используется функция Handles.DrawLine. В документации для Handles.DrawLine есть очень похожий пример.
using UnityEngine;
using UnityEditor;
[CustomEditor( typeof( DrawLine ) )]
public class DrawLineEditor : Editor
{
// рисовать линии между выбранным игровым объектом
// и выбор добавленных игровых объектов
void OnSceneGUI()
{
// получаем выбранный игровой объект
DrawLine t = target as DrawLine;
if( t == null || t.GameObjects == null )
return;
// захватить центр родителя
Vector3 center = t.transform.position;
// перебираем игровые объекты, добавленные в массив...
for( int i = 0; i < t.GameObjects.Length; i++ )
{
// ... и провести между ними линию
if( t.GameObjects[i] != null )
Handles.DrawLine( center, t.GameObjects[i].transform.position );
}
}
}
Этот скрипт хранит массив игровых объектов, к которым будет нарисована линия. Этот обычный скрипт просто прикрепляется к игровому объекту, который считается отправной точкой для всех линий.
using UnityEngine;
[ExecuteInEditMode]
public class DrawLine : MonoBehaviour
{
// массив игровых объектов, который будет иметь
// линия, нарисованная в редакторе Scene
public GameObject[] GameObjects;
}