辅助图标和手柄类用于在场景视图和游戏视图绘制线条和形状以及交互式手柄和控件。这两个类共同为你提供了一种方法,使你能够扩展在这些视图中所显示的内容,并构建交互式工具,从而以任何你喜欢的方式来编辑你的项目。例如,您可以在游戏中围绕非玩家角色创建一个可拖动的圆圈辅助图标,代表它可听到或看到玩家的区域,而不必在检视面板 (Inspector) 中输入数字。
本页面提供了辅助图标和手柄类的简单概述。有关辅助图标和手柄类每个成员的完整文档和详尽参考,请参阅辅助图标和手柄脚本参考页面。
辅助图标类允许您将线条、球体、立方体、图标、纹理和网格绘制到场景视图中,在开发项目时用作调试、设置的辅助手段或工具。
例如,要在游戏对象周围绘制一个 10 个单位的黄色线框立方体,您可以使用以下代码:
using UnityEngine;
public class GizmosExample : MonoBehaviour
{
void OnDrawGizmosSelected()
{
// Draw a yellow cube at the transform position
Gizmos.color = Color.yellow;
Gizmos.DrawWireCube(transform.position, new Vector3(10, 10, 10));
}
}
这是将立方体放置在一个方向光游戏对象上时的外观。
有关如何使用辅助图标的完整文档,请参阅辅助图标脚本参考页面。
手柄类似于辅助图标,但在交互性和操作方面提供了更多功能。Unity 本身提供的用于在场景视图中操作项目的 3D 控件是辅助图标和手柄的组合。内置的手柄 GUI 有很多,如通过变换组件定位、缩放和旋转对象等熟悉的工具。不过,您可以自行定义手柄 GUI,以与自定义组件编辑器结合使用。此类 GUI 对于编辑以程序方式生成的场景内容、“不可见”项和相关对象的组(如路径点和位置标记)非常实用。
例如,以下是如何创建带有箭头手柄的圆弧区域,用于在场景视图中修改 “shield area”:
using UnityEditor;
using UnityEngine;
using System.Collections;
//this class should exist somewhere in your project
public class WireArcExample : MonoBehaviour
{
public float shieldArea;
}
// Create a 180 degrees wire arc with a ScaleValueHandle attached to the disc
// that lets you modify the "shieldArea" value in the WireArcExample
[CustomEditor(typeof(WireArcExample))]
public class DrawWireArc : Editor
{
void OnSceneGUI()
{
Handles.color = Color.red;
WireArcExample myObj = (WireArcExample)target;
Handles.DrawWireArc(myObj.transform.position, myObj.transform.up, -myObj.transform.right, 180, myObj.shieldArea);
myObj.shieldArea = (float)Handles.ScaleValueHandle(myObj.shieldArea, myObj.transform.position + myObj.transform.forward * myObj.shieldArea, myObj.transform.rotation, 1, Handles.ConeHandleCap, 1);
}
}
有关如何使用手柄的完整文档,请参阅手柄脚本参考页面。