Version: 2020.3

Editor.OnSceneGUI()

切换到手册

描述

使编辑器在场景视图中处理事件。

OnSceneGUI 中,您可以编辑网格、绘制 地形或创建高级辅助图标等操作。如果调用 Event.current.Use(),则编辑器 (而非场景视图本身)将使用该事件。

在以下两个脚本中,OnSceneGUI 用于绘制游戏对象之间的 线条。第一个脚本显示了如何使用 OnSceneGUI。在 此脚本中,游戏对象用作父对象。 获取该父对象的位置后,绘制从该位置到数组中存储的游戏对象的线条。 Handles.DrawLine 函数用于此过程。Handles.DrawLine 文档中介绍了一个非常相似的示例。

using UnityEngine;
using UnityEditor;

[CustomEditor( typeof( DrawLine ) )] public class DrawLineEditor : Editor { // draw lines between a chosen game object // and a selection of added game objects

void OnSceneGUI() { // get the chosen game object 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 game objects 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 ); } } }

此脚本会存储游戏对象的数组 (将向这些对象绘制线条)。此常规脚本只是附加到 被视为所有线条起点的游戏对象。

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; }