Description

Enables the Editor to handle an event in the Scene view.

In the OnSceneGUI you can do for example mesh editing, terrain painting or advanced gizmos. If Event.current.Use() is called the event will be "eaten" by the editor and not be used by the Scene view itself.

在以下两个脚本中,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; }