版本: Unity 6 (6000.0)
语言英语
  • C#

Editor.OnSceneGUI()

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们会阅读用户提出的每个更改建议,并在适用的情况下进行更新。

关闭

提交失败

由于某种原因,您的更改建议无法提交。请 <a>稍后重试</a>。感谢您花时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

使编辑器能够处理场景视图中的事件。

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