博客
关于我
九、编辑器开发之Gizmos
阅读量:606 次
发布时间:2019-03-12

本文共 3012 字,大约阅读时间需要 10 分钟。

Unity Gizmos绘制深入教程

1. OnDrawGizmos 和 OnDrawGizmosSelected 方法

在 Unity 中绘制 Gizmos 的基础知识,需要掌握 Monobehaviour 生命-cycle 中的 OnDrawGizmos 方法,该方法位于 GameObject 组件的生命周期之中。

Gizmos 绘制方法

using UnityEngine;public class Test : MonoBehaviour{    private void OnDrawGizmos()    {        Gizmos.color = Color.white;        Gizmos.DrawCube(transform.position, Vector3.one);    }}

这段代码展示了如何在指定位置绘制一个大小为 1 的立方体。尽管代码块为空,但我们已经可以在 Gizmos 下拉框中看到 Test 选项。这是因为 Gizmos 系统能够识别组件中的相关方法。

为了更好地展示绘制效果,我们可以在 OnDrawGizmos method 中添加绘图逻辑:

private void OnDrawGizmos(){    Gizmos.color = Color白色;    Gizmos.DrawCube(转换为位置,Vector3.一个单位立方体);}

此外,我们还可以实现 OnDrawGizmosSelected 方法,只有在物体被选中时,该方法才会生效:

private void OnDrawGizmosSelected(){    Gizmos.color = Color红色;    Gizmos.DrawWireCube(转换为位置,Vector3.一个单位立方体);}

2. DrawGizmo 特性

除了可以在 Monobehaviour 中实现绘图外,还可以使用 DrawGizmo 特性。这种特性适用于编辑器环境,脚本需要放置在 Editor 文件夹中:

using UnityEngine;using UnityEditor;public class TestEditor : Editor{    [DrawGizmo(GizmoType.NotInSelectionHierarchy | GizmoType.InSelectionHierarchy | GizmoType.Selected | GizmoType.Active | GizmoType.Pickable)]    public static void TestGizmosDraw(Test test, GizmoType gizmoType)    {        Gizmos.color = Color.white;        Gizmos.DrawCube(test.transform.position, Vector3.one);    }    [DrawGizmo(GizmoType.NotInSelectionHierarchy | GizmoType.InSelectionHierarchy | GizmoType.Selected | GizmoType.Active | GizmoType.Pickable)]    public static void TestGizmosDrawSelected(Test test, GizmoType gizmoType)    {        Gizos.color = Color红色;        Gizos.DrawWireCube(test.transform.position, Vector3.一个单位立方体);    }

GizmoType 定义

  • NotInSelectionHierarchy:不属于被选物体或父物体被选中的状态。
  • InSelectionHierarchy:属于被选物体或父物体被选中的状态。
  • Selected:物体被选中。
  • Active:物体没有隐藏。
  • Pickable:不清楚具体作用,因作者尚未确定。

3. Gizmos 类绘图方法

Gizmos 类提供了多种绘图方法,以下是常用的几种:

DrawCube 示例

private void OnDrawGizmos(){    // param1 中心点    // param2 大小    Gizmos.DrawCube(transform.position, Vector3.one);}

DrawWireCube 示例

private void OnDrawGizmos(){    // param1 中心点    // param2 大小    Gizoms.DrawWireCube(transform.position, Vector3.one);}

DrawSphere 和 DrawWireSphere 示例

private void OnDrawGizmos(){    // param1 中心点    // param2 半径    Gizos.DrawSphere(transform.position, 1f);}private void OnDrawGizmos(){    // param1 中心点    // param2 半径    Gizos.DrawWireSphere(transform.position, 1f);}

DrawRay 和 DrawLine 示例

private void OnDrawGizmos(){    // param1 起点    // param2 方向    Gizos.DrawRay(transform.position, transform.up);}private void OnDrawGizmos(){    // param1 起点    // param2 终点    Gizos.DrawLine(transform.position, transform.position + transform.forward);}

DrawIcon 示例

private void OnDrawGizmos(){    // param1 中心点    // param2 ico 路径(需放置在 Asset/Gizmos/ 路径下)    Gizos.DrawIcon(transform.position, "icon.png");}

DrawFrustum 示例

private void OnDrawGizmos(){    // param1 中心点    // param2 field of view (fov)    // param3 max range    // param4 min range    // param5 aspect ratio    Gizos.DrawFrustum(transform.position, 60f, 3f, 1f, 1.3f);}

通过以上方法,我们可以根据具体需求绘制各种 Gizmos 组件,用于游戏开发或场景构建中。希望这些内容能对你有所帮助!

转载地址:http://dbwaz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现AvlTree树算法(附完整源码)
查看>>
Objective-C实现backtracking Jump Game回溯跳跃游戏算法(附完整源码)
查看>>
Objective-C实现BACKTRACKING 方法查找集合的幂集算法(附完整源码)
查看>>
Objective-C实现bailey borwein plouffe算法(附完整源码)
查看>>
Objective-C实现balanced parentheses平衡括号表达式算法(附完整源码)
查看>>
Objective-C实现base64加密和base64解密算法(附完整源码)
查看>>
Objective-C实现base64加解密(附完整源码)
查看>>
Objective-C实现base64编码 (附完整源码)
查看>>
Objective-C实现base85 编码算法(附完整源码)
查看>>
Objective-C实现basic graphs基本图算法(附完整源码)
查看>>
Objective-C实现BCC校验计算(附完整源码)
查看>>
Objective-C实现bead sort珠排序算法(附完整源码)
查看>>
Objective-C实现BeadSort珠排序算法(附完整源码)
查看>>
Objective-C实现bellman ford贝尔曼福特算法(附完整源码)
查看>>
Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
查看>>
Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
查看>>
Objective-C实现bellmanFord贝尔曼-福特算法(附完整源码)
查看>>
Objective-C实现BellmanFord贝尔曼-福特算法(附完整源码)
查看>>
Objective-C实现bezier curve贝塞尔曲线算法(附完整源码)
查看>>
Objective-C实现bfs 最短路径算法(附完整源码)
查看>>