本文共 3012 字,大约阅读时间需要 10 分钟。
在 Unity 中绘制 Gizmos 的基础知识,需要掌握 Monobehaviour 生命-cycle 中的 OnDrawGizmos 方法,该方法位于 GameObject 组件的生命周期之中。
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.一个单位立方体);} 除了可以在 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.一个单位立方体); } Gizmos 类提供了多种绘图方法,以下是常用的几种:
private void OnDrawGizmos(){ // param1 中心点 // param2 大小 Gizmos.DrawCube(transform.position, Vector3.one);} private void OnDrawGizmos(){ // param1 中心点 // param2 大小 Gizoms.DrawWireCube(transform.position, Vector3.one);} private void OnDrawGizmos(){ // param1 中心点 // param2 半径 Gizos.DrawSphere(transform.position, 1f);}private void OnDrawGizmos(){ // param1 中心点 // param2 半径 Gizos.DrawWireSphere(transform.position, 1f);} private void OnDrawGizmos(){ // param1 起点 // param2 方向 Gizos.DrawRay(transform.position, transform.up);}private void OnDrawGizmos(){ // param1 起点 // param2 终点 Gizos.DrawLine(transform.position, transform.position + transform.forward);} private void OnDrawGizmos(){ // param1 中心点 // param2 ico 路径(需放置在 Asset/Gizmos/ 路径下) Gizos.DrawIcon(transform.position, "icon.png");} 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/