Version: 2017.1

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