版本:2022.3
语言: 英文
调试
Unity 架构

Gizmos 和 Handles

The Gizmos 和 Handles 类允许你在场景场景包含你的游戏的环境和菜单。将每个独特的场景文件视为一个独特等级。每个场景中都放置你的环境、障碍物和装饰,本质上在片段中设计构建你的游戏。更多信息
参考术语表
视图和游戏视图中绘制线条和形状,以及交互式 Handles 和控制。这两个类一起为你提供了一种扩展这些视图中所显示内容的方式,并可以构建交互式工具以任何你想要的方式编辑你的项目。例如,而不是在检查器一个 Unity 窗口,显示有关当前选定的 GameObject、资产或项目设置的信息,允许你检查和编辑值。更多信息
参考术语表
中输入数字,你可以在游戏中一个非玩家角色周围创建一个可拖动的圆形半径 Gizmos,代表它们可以听到或看到玩家的区域。

此页面提供了 Gizmos 和 Handles 类的简单概述。有关完整文档和 Gizmos 和 Handles 类每一成员的详尽参考,请参阅 Gizmos与场景中的 GameObject 关联的图形叠加层,并在场景视图中显示。内置场景工具,如移动工具,是 Gizmos,您可以使用纹理或脚本创建自定义 Gizmos。一些 Gizmos 仅在选择 GameObject 时绘制,而其他 Gizmos 不论选择哪些 GameObject 都由编辑器绘制。更多信息
参考术语表
Handles 的脚本参考页面。

Gizmos

Gizmos 类允许你将线条、球体、立方体、图标、纹理和网格绘制到场景视图交互式的进入你在创建的世界的窗口。您使用场景视图来选择和定位风景、人物、摄像机、灯光以及所有类型的游戏对象。更多信息
参考术语表
,作为你的项目开发中的调试、设置辅助工具或工具。

例如,要围绕一个游戏对象Unity 场景中的基本对象,可以代表人物、道具、风景、摄像机、路线点等。游戏对象的功能由附加到它的组件定义。更多信息
参考术语表
绘制一个 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));
    }
}

以下是该立方体放置在方向性光 GameObject 上的样子。

A light GameObject with an extra script applied which draws a cube gizmo around its position
带有附加脚本的应用程序额外的光源 GameObject,该脚本在其位置绘制立方体 Gizmos

有关如何使用 Gizmos 的完整文档,请参阅Gizmos 脚本参考页面

Handles

句柄与Gizmos类似,但提供了更多的交互性和操纵功能。Unity自身提供给场景视图中操作项目的3D控件是Gizmos和句柄的组合。存在许多内置的句柄GUI,例如通过变换组件变换组件确定场景中每个对象的Position、Rotation和Scale。每个GameObject都有一个Transform。更多信息
术语表中查看
编辑对象位置、缩放和旋转的熟悉工具。然而,您可以定义自己的句柄GUI来与自定义组件编辑器一起使用。这些GUI可以是一种非常实用的方法来编辑过程生成的场景内容,“隐形”项目以及相关的对象组,如航点和位置标记。

例如,以下是您可以如何创建带有箭头句柄的圆弧区域的方法,允许您在场景视图中修改“护盾区域”:

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);
    }
}
An example of an Arc handle and an Scale handle
弧形句柄和缩放句柄的示例

有关如何使用句柄的完整文档,请参阅句柄脚本参考页面

调试
Unity 架构