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