Editor.OnSceneGUI()
Описание
Позволяет Редактору обрабатывать событие в представлении Scene.
В течение OnSceneGUI вы можете, например, редактировать меши, рисовать местность, или иметь продвинутые гаджеты. См. Handles класс — методы, связанные с отрисовкой интерактивной графики в SceneView.
Если вы хотите рисовать элементы в представлении Scene, например, используя `Graphics.DrawMeshNow`, делайте это только во время EventType.Repaint.
В следующих двух скриптах, OnSceneGUI используется для рисования линий между GameObjects. Первый скрипт показывает, как OnSceneGUI В этом скрипте GameObject используется в качестве родительского объекта. Скрипт получает позицию родительского объекта, а затем рисует строки от этой позиции до GameObjects, хранящегося в массиве. Скрипт использует Handles.DrawLine Документация по проектированию Handles.DrawLine имеет очень похожий пример.
using UnityEngine; using UnityEditor;
[CustomEditor( typeof( DrawLine ) )] public class DrawLineEditor : Editor { // Draw lines between a chosen GameObject // and a selection of added GameObjects
void OnSceneGUI() { // Get the chosen GameObject DrawLine t = target as DrawLine;
if( t == null || t.GameObjects == null ) return;
// Grab the center of the parent Vector3 center = t.transform.position;
// Iterate over GameObject added to the array... for( int i = 0; i < t.GameObjects.Length; i++ ) { // ... and draw a line between them if( t.GameObjects[i] != null ) Handles.DrawLine( center, t.GameObjects[i].transform.position ); } } }
Этот скрипт хранит массив GameObjects, к которым нарисована линия. Этот обычный скрипт прикрепляется к GameObject, который считается начальной точкой для всех строк.
using UnityEngine;
[ExecuteInEditMode] public class DrawLine : MonoBehaviour { // an array of game objects which will have a // line drawn to in the Scene editor public GameObject[] GameObjects; }