使编辑器在场景视图中处理事件。
在 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; }