使编辑器能够处理场景视图中的事件。
在 OnSceneGUI 中,您可以例如编辑网格、绘制地形或使用高级 Gizmo。有关在 SceneView 中绘制可交互视觉效果的方法,请参考 Handles 类。
如果您想在场景视图中绘制元素,例如使用 `Graphics.DrawMeshNow`,请仅在 EventType.Repaint 中执行此操作。
在以下两个脚本中,OnSceneGUI 用于在游戏对象之间绘制线条。第一个脚本展示了如何使用 OnSceneGUI。在这个脚本中,一个游戏对象被用作父对象。该脚本获取父对象的位置,然后从该位置绘制到存储在数组中的游戏对象的线条。该脚本使用 Handles.DrawLine 来绘制线条。Handles.DrawLine 的文档包含非常相似的示例。
using UnityEngine; using UnityEditor;
[CustomEditor( typeof( DrawLine ) )] public class DrawLineEditor : Editor { // Draw lines between a chosen GameObject // and a selection of added GameObjects
void OnSceneGUI() { // Get the chosen GameObject 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 GameObject 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 ); } } }
此脚本存储了绘制线条的 GameObjects 数组。此常规脚本附加到被视为所有线条起点的一个 GameObject。
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; }