【Unity编辑器拓展】5_Gizmos辅助调试工具

Gizmos辅助调试工具

Gizmos是Scene场景的可视化调试或辅助工具,可以通过两种方式实现。

1、通过OnDrawGizmo或者OnDrawGizmosSelected方法

代码示例

using UnityEngine;



public class Test5_GizmosExample : MonoBehaviour

{

    //一直绘制

    private void OnDrawGizmos()

    {

        Color color = Gizmos.color;

        Gizmos.color = Color.green;

        Gizmos.DrawSphere(transform.position, 0.3f);

        Gizmos.color = color;

    }



    //选中物体才进行绘制

    private void OnDrawGizmosSelected()

    {

        Color color = Gizmos.color;

        Gizmos.color = Color.red;

        Gizmos.DrawSphere(transform.position, 0.3f);

        Gizmos.color = color;

    }

}

效果展示

未选中物体

选中物体

P.S. Gizmos.color作为全局的静态变量,为了防止这里的color修改会对其他地方的绘制造成影响,所以在绘制完Gizmos的时候,将Gizmos.color修改为原先的值。

OnDrawGizmo或者OnDrawGizmosSelected作为MonoBehaviour的方法,可以直接放在业务逻辑脚本中

2、通过DrawGIzmos特性

新建一个表示业务逻辑的类TargetExample,将其挂载在场景中的对象身上

代码示例

using UnityEditor;

using UnityEngine;



public class Test5_GizmosTest

{

    [DrawGizmo(GizmoType.Selected)]

    public static void GizmosDrawTest5(Test5_GizmosExample target, GizmoType gizmoType)

    {

        Color color = Gizmos.color;

        Gizmos.color = Color.yellow;

        Gizmos.DrawLine(target.transform.position, target.transform.position + Vector3.up);

        Gizmos.color = color;

    }

}

效果展示

PS. 该方法需要将该类放在Editor文件夹内,使用特性的方法可以将业务逻辑和调试脚本分开。由于其针对的是编辑器组件的方法,需要设置为Static方法。

绘制类型

GizmosType

描述

Active

如果激活,则绘制

SelectedOrChild

如果被选择或者选择子物体时,则绘制

NotSelected

如果全没选择,则绘制

Selected

如果选择,则绘制

Pickable

在编辑器中gizmo可以被点选

3、常用Gizmos的方法

  • Gizmos.DrawCube() 绘制实体立方体
  • Gizmos.DrawWireCube() 绘制立方体边框
  • Gizmos.DrawRay() 绘制射线
  • Gizmos.DrawLine() 绘制直线
  • Gizmos.DrawIcon() 绘制Icon,Icon素材需要放在Gizmos文件夹中
  • Gizmos.DrawFrustum() 绘制摄像机视椎体的视野范围

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Unity3D脚本18:可视化辅助设置类 Gizmos GizmosGizmos用于场景中给出一个可视化的调试或辅助设置。 所有的Gizmos绘制都必须在脚本的OnDrawGizmos或OnDrawGizmosSelected函数中完成。 OnDrawGizmos在每一帧都被调用。所有在OnDrawGizmos内部渲染的Gizmos都是可见的。 OnDrawGizmosSelected尽在脚本所附加的物体被选中时调用。 类变量 ◆ static var color : Color // 描述:设置下次绘制的Gizmos的颜色。 function OnDrawGizmosSelected() { Gizmos.color = Color.red; var direction = transform.TransformDirection(Vector3.forward) * 5; // 在物体的前方绘制一个5米长的线 Gizmos.DrawRay(transform.position, direction); } ◆ static var matrix : Matrix4x4 // 描述:设置用于渲染所有gizmos的矩阵。 类方法 ◆ Static function DrawCube(center:Vector3,size:Vector3):void // 描述:用center和size绘制一个立方体. Function OnDrawGizmosSelected(){ Gizmos.color=Color(1,0,0,5); // 在变换位置处绘制一个变透明的蓝色立方体 Gizmos.DrawCube(transform.position,Vector3(1,1,1)); } ◆ Static function DrawGUITexture(screenRect:Rect,texture:Texture,mat:Material=null):void // 描述:在屏幕坐标下绘制一个纹理。用于GUI背景。 ◆ Static function DrawGUITexture(screenRect:Rect,texture:Texture,leftBorder:int,rightBorder:int,topBorder:int,bottomBorder:int,mat:Material=null):void // 描述:在屏幕坐标下绘制一个纹理。用于GUI背景。 ◆ Static function Drawicon(center:Vector3,name:string):void // 描述:在世界位置center处绘制一个图标.这个图标被命名为name并放置在Assets/Gizmos文件夹或Unity.app/Resoutces文件夹.DrawIcon允许你在游戏中快速选择重要的物体。 在物体位置处绘制光源灯泡图标.因为我们在OnDrawGizmos函数内部调用它,在场景视图中 ,这个图标总是可点选的. function OnDrawGizmos(){ Gizmos DrawIcon(transform.position,”Light Gizmo.tiff”); } ◆ Static function DrawLine(from:Vector3,to:Vector3):void // 描述:绘制一条线从from到to. Var Larget:Transform; function OnDrawGizmosSelected(){ if(target != null) { Gizmos.color = Color.blue; //从transform到target绘制一条蓝色的线 Gizmos.DrawLine(transform.position,target.position); } } ◆ static function DrawRay(r:Ray):void static function DrawRay(from:Vector3,direction:Vector3):void // 描述:绘制一个射线从from开始到from + direction. ◆ function OnDrawGizmosSelected(){ Gizmos.color = Color.red; Direction = transform.TransformDirection(Vector3.forward)*5; Gizmos.DrawRay(transform.positon,direction); } ◆ Static function DrawSphere(center:Vector3,radius:flont):void // 描述:用center和randins绘制一个球体. Function OnDrawGizmosSelected(){ Gizmos.color = Color.yellow; // 在变换位置处绘制一个黄色的球体 Gizmos.DrawSphere(transtorm.position,1); } ◆ Static function DrawWireCube(center:Vector3, size: Vector3):void // 描述:用center和radius绘制一个线框立方体. Function OnDrawGizmosSelected(){ Gizmos.color = Color.yellow; //在变换位置处绘制一个黄色立方体 Gizmos.DrawWireCube (transtorm.position, Vector3(1,1,1)); } ◆ Static function DrawWireSphere(center:Vector3,radius:float):void // 描述:用center和radius绘制一个线框球体. Var explosionRadius = 5.0; Function OnDrawGizmosSelected(){ Gizmos.color = Color.white; //选中的时候显示爆炸路劲 Gizmos.DrawSphere(transtorm.position,explpsionRadius); }
Unity编辑器拓展(Editor Extension)可以通过自定义的脚本来扩展Unity编辑器的功能和界面,以满足特定项目的需求。通过编辑器拓展,开发者可以创建自定义的编辑器窗口、工具栏按钮、菜单项、检视面板等,来增强Unity编辑器的功能和流程。 要创建一个Unity编辑器拓展,你可以使用C#编写一个继承自Editor类的脚本。这个脚本可以通过Unity的Inspector面板来设置相关的属性和行为。以下是一个简单的示例: ```csharp using UnityEngine; using UnityEditor; public class MyEditorExtension : EditorWindow { [MenuItem("Custom Tools/My Editor Window")] public static void OpenWindow() { // 创建并打开一个自定义的编辑器窗口 MyEditorExtension window = (MyEditorExtension)EditorWindow.GetWindow(typeof(MyEditorExtension)); window.Show(); } private void OnGUI() { // 在编辑器窗口中绘制UI元素 GUILayout.Label("Hello, I am a custom editor window!"); if (GUILayout.Button("Click Me")) { Debug.Log("Button clicked!"); } } } ``` 上述代码创建了一个自定义的编辑器窗口,并在窗口中绘制了一个标签和一个按钮。通过在Unity编辑器中点击"Custom Tools"菜单下的"My Editor Window",可以打开这个自定义的编辑器窗口。 除了编辑器窗口,你还可以通过继承Editor类来创建自定义的检视面板、菜单项等。Unity官方文档中有更详细的教程和示例,可以帮助你更深入地了解和使用Unity编辑器拓展
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值