Unity编辑器功能及拓展(2) —Gizmos编辑器绘制功能
Unity中的Gizmos功能是用于在场景视图中绘制辅助图形或图标的工具,帮助开发者在编辑模式下直观调试和可视化游戏对象的位置、范围、方向等信息。
一.定义概述
Gizomsd 概述
Gizoms是Unity提供的一个API,或者叫做一个工具类,包含一系列静态方法。
既然提到Gizoms不得不提到OnDrawGizmosxxx 系列函数。命名相近需要区分一下。
OnDrawGizmosxxx 概述
包含OnDrawGizmos( )和OnDrawGizmoselected( ),它们是Unity的MonoBehaviour中的生命周期函数,作为绘制Gizmos的入口点,开发者需要再此方法内调用Gizmos的绘制函数,定义需要的图形

OnDrawGizmosxxx是定义何时绘制和如何触发的入口方法,而Gizmos是提供具体绘制能力的工具类。
二.Gizmos的核心功能
1.调试可视化
无需运行游戏,直接在场景视图中显示自定义图形。
常用函数
DrawLine:绘制直线
DrawSphere:绘制球体
DrawFrustum:绘制视椎体
DrawWireCube:绘制空心立方
属性控制
Gizmos.color:后续绘制颜色
Gizmos.matrix:基于对象坐标系绘制
示例代码
private void OnDrawGizmos(){Gizmos.color = Color.blue;Gizmos.matrix=transform.localToWorldMatrix;Gizmos.DrawCube(Vector3.forward,Vector3.one*0.5f);Gizmos.matrix = Matrix4x4.identity; }
示例效果
基于物体自身坐标系的forward方向渲染立方体

开关控制
场景视图中的Gizmos菜单可全局启用或禁用Gizmos显示

下拉Gizmos菜单中且可以控制所有目标脚本内及其他的Gizmos绘制显示

2.图标标记
DrawIcon()可绘制icon或Tex,便于显示定位。
示例代码:
private void OnDrawGizmos(){Gizmos.DrawIcon(transform.position, "tree.jpg");}
DrawIcon( )第二个输入参数string name 表示位于Assets/Gizmos路径下的资源名称。

经过多次实验,我认为需要带上资源的图片格式后缀(如jpg,png)。
实验结果:

三.Gizmos的相关应用
1.逻辑/碰撞检测可视化
在制作像平台游戏中的敌人AI时,我们经常需要多重射线和碰撞盒进行检测判断,此时可视化检测范围是较为重要的可提高效率的手段。
例如我们需要绘制一条竖直的射线来检测玩家是否到达地面。
或者敌人需要对面前一定距离或区域进行检测,查看是否看到了玩家进入追击状态等。
这里拿我以前的一个小项目举例:
敌人身上的白色圆形可视化区域是来检测是否可以进行攻击,白色的短直线用来可视化检测前方是否是地面边缘。

2.自定义图形绘制(仅场景视图)
我分别在四个空物体上挂载测试脚本,并在场景中绘制了四个空心立方体。
示例代码
//每帧在Scene内绘制void OnDrawGizmos(){Gizmos.color = Color.cyan;//绘制青色空心立方体Gizmos.DrawWireCube(transform.position, Vector3.one * 0.5f);}
实验结果

接着我们来实现一个小功能:在场景视图内,当我们选择一个游戏物体时,渲染一条自原点与该游戏物体的连线。
这里我写一个专门用于编辑器下的功能脚本,在Editor文件夹下新建脚本。

示例代码
using UnityEditor;
using UnityEngine;public class GizmosEditor
{//挂载目标脚本的对象被选中且激活状态下绘制[DrawGizmo(GizmoType.Active | GizmoType.Selected)]static void CustomOnDrawGizmos(GizmosText traget, GizmoType type){//物体被选中时将会显示自身至原点的一条连线Gizmos.color = Color.blue;Gizmos.DrawLine(Vector3.zero, traget.transform.position);}
}
实验效果

接着我想加工一下这四个立方体,当我选中一个立方体时,该立方体会更复杂一些。
另外需要注意的是:
OnDrawGizmos()//在Scene视图内每帧绘制
OnDrawGizmosSelected() //选中该脚本挂载对象时每帧在Scene内绘制
为减少不必要的性能消耗,我们可以使用一个bool变量来决定如何渲染。
这里我采用了一个bool变量来控制立方体是否在选中时绘制图形。
示例代码
using UnityEngine;public class GizmosText : MonoBehaviour
{[Header("仅在被选中时绘制")]public bool isOnSelectedCanDraw = true;//每帧在Scene内绘制void OnDrawGizmos(){Gizmos.color = Color.cyan;Gizmos.DrawWireCube(transform.position, Vector3.one * 0.5f);if (!isOnSelectedCanDraw)DrawMyCube();}//选中该脚本挂载对象时每帧在Scene内绘制//只有选中该物体才会绘制private void OnDrawGizmosSelected(){if (isOnSelectedCanDraw)DrawMyCube();}void DrawMyCube(){Gizmos.color = Color.red;Gizmos.DrawCube(transform.position, Vector3.one * 0.4f);//绘制一个小实心立方体Gizmos.color = Color.yellow;Gizmos.DrawWireSphere(transform.position, 0.6f);//绘制一个空心黄球体}
}
实验结果

本篇完~
相关文章:
Unity编辑器功能及拓展(2) —Gizmos编辑器绘制功能
Unity中的Gizmos功能是用于在场景视图中绘制辅助图形或图标的工具,帮助开发者在编辑模式下直观调试和可视化游戏对象的位置、范围、方向等信息。 一.定义概述 Gizomsd 概述 Gizoms是Unity提供的一个API,或者叫做一个工具类,包含一系列静态…...
电脑屏幕亮度随心控,在Windows上自由调整屏幕亮度的方法
调整电脑屏幕的亮度对于保护视力和适应不同环境光线条件非常重要。无论是在白天强光下还是夜晚昏暗环境中,合适的屏幕亮度都能让您的眼睛更加舒适。本文中简鹿办公小编将向您介绍几种在 Windows 系统中调整屏幕亮度的方法。 方法一:使用快捷键 大多数笔…...
presto行转列
presto的行列转换和spark、hive一样也是通过外链语句实现的,只不过语法和关键子有点不同,如下 with tmp1 as (select 1,2,3 as a1,4,5,6 as a2 ) select * from tmp1 cross join unnest(split(tmp1.a1, ,),split(tmp1.a2, ,) ) as b(a1s,a2s) 结果如下...
MySQL 5.7 Online DDL 技术深度解析
14.13.1 在线DDL操作 索引操作主键操作列操作生成列操作外键操作表操作表空间操作分区操作 索引操作 下表概述了对索引操作的在线DDL支持情况。星号表示有附加信息、例外情况或依赖条件。有关详细信息,请参阅语法和使用说明。 操作原地执行重建表允许并发DML仅修…...
【汽车功能安全:软件与硬件缺一不可】
随着汽车变得越来越智能,功能安全就成为汽车电子系统不可回避的标准体系,日益复杂的功能导致了汽车中电子元件的数量和复杂性的指数级增长(Leen)。如今高级别汽车拥有多达90个电子控制单元(ECU),…...
docker打包使用有头模式playwright
1.打包镜像 创建Dockerfile文件如下 # playywright 官方镜像 FROM mcr.microsoft.com/playwright:v1.37.0-jammy# 设置非交互式环境变量和时区 ENV DEBIAN_FRONTENDnoninteractive ENV TZEtc/UTC# 安装 Python 3.9 和 pip(修复时区阻塞问题) RUN apt-g…...
TCP/IP协议的应用层与传输层
TCP/IP协议簇是互联网的核心通信框架,定义了数据如何在网络中封装、寻址、传输和路由(确定数据包从源主机到目标主机的传输路径的过程)。 应用层 直接面向用户和应用,负责实现网络服务的具体功能(如网页浏览、文件传输…...
51c自动驾驶~合集15
我自己的原文哦~ https://blog.51cto.com/whaosoft/11720657 #DRAMA 首个基于Mamba的端到端运动规划器(新加坡国立) 运动规划是一项具有挑战性的任务,在高度动态和复杂的环境中生成安全可行的轨迹,形成自动驾驶汽车的核心能…...
拼多多 anti-token unidbg 分析
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 版本7.3-7.4 都试过加密没什…...
【Git】5 个分区的切换方式及示例
目录 1. **工作区(Working Directory)**2. **缓存区(Stage/Index)**3. **本地仓库(Local Repository)**4. **远程仓库(Remote Repository)**5. **贮藏区(Stash࿰…...
Java高频面试之并发编程-02
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:进程和线程的区别是什么? 1. 资源分配与独立性 进程: 独立性:每个进程拥有独立的内存…...
openwebui和keycloak集成,使用keycloak的用户名和密码登录
1,实现效果 使用keycloak定义的用户名和密码,直接登录openwebui 2,实现原理 keycloak中用户信息中包含用户名和密码,以及email。 使用keycloak中的用户名和密码登录之后,会用email创建一个openwebui的账号。之后每次…...
html实现手势密码
<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>手势密码</title><style>body {font-fam…...
【区块链安全 | 第八篇】多签机制及恶意多签
部分参考:慢雾科技 文章目录 为什么需要多签多签机制Tron钱包下的恶意多签Tron 钱包多签权限分类Tron 多签机制的运作方式 恶意多签的过程黑客通过多签机制控制账户黑客剥夺用户权限,完全控制账户 恶意多签成因 在区块链中,多签(M…...
项目如何安装本地tgz包并配置局部registry
一、判断包来源是否正确 1. 检查url curl <registry_url>2. 查看包是否存在 npm view <package_name> --registry<registry_url>二、局部registry配置步骤: 1. 全局配置 如果你希望对所有项目生效,可以将这行配置添加到全局.npmr…...
二月公开赛Web-ssrfme
目录 环境搭建 题目分析 分析代码 解题过程 Redis未授权访问 寻找Flag 环境搭建 进入含有docker-compose.yml的文件内,拉取容器镜像 docker-compose up -d 题目分析 访问容器地址172.25.254.200:8091查看题目 分析代码 url通过GET请求访问界面,…...
JavaRedis和数据库相关面试题
JavaRedis面试题 1. Redis是什么以及Redis为什么快? Redis(Remote Dictionary Server)是一个开源的内存键值数据库,支持多种数据结构(如字符串、哈希、列表、集合等),并提供持久化、复制、…...
告别枯燥工作,走向自动化
嘿,小伙伴们!今天给你们介绍两款超实用的RPA办公自动化软件,用它们,再也不用像机器一样做重复劳动啦,超省时间! 工具名称:影刀RPA(类似产品,八爪鱼 RPA,操作上…...
Spring的 @Conditional @ConditionalOnProperty 注解 笔记250330
Spring的 Conditional ConditionalOnProperty 注解 Spring 的 Conditional 与 ConditionalOnProperty 注解详解 在 Spring 框架中,Conditional 和 ConditionalOnProperty 是用于动态控制 Bean 注册的重要注解。虽然它们都服务于条件化配置,但定位和使用…...
可信数据空间:构筑安全可控数据流通
前言:可信数据空间是一种数据基础设施,发展可信数据空间是全国及各地数据基础设施建设的重要方面。国内数据空间的探索和实践仍然数据探索阶段。本期分享:可信数据空间构筑安全可控数据流通,包括可信数据空间技术介绍、如何助力数…...
Zookeeper特性与节点数据类型
数据结构和监听机制 CP 文件系统形式存储 观察者模式监听节点数据变化、 临时节点客户端超时或发生异常节点就会删除 2888同步数据 3888选举端口 1.什么是Zookeeper ZooKeeper 是一个开源的分布式协调框架,是Apache Hadoop 的一个子项目,主要用来…...
【C++游戏引擎开发】《线性代数》(6):SVD(奇异值分解)的数学原理与实现
一、奇异值分解(SVD)的数学定义 奇异值分解(Singular Value Decomposition,SVD)是一种将任意实数或复数矩阵分解为三个特定矩阵乘积的方法。其数学定义如下: 1.1 分解形式 给定一个秩为 r r r的矩阵 A ∈ R m n \mathbf{A} \in \mathbb{R}^{m \times n} A∈Rmn(或…...
C语言pthread库创建线程的案例
一、代码案例 #include<stdio.h> #include<stdlib.h> // 多线程库 #include<pthread.h> // 线程1的逻辑描述 void* thread_method_01(void* v){ printf("线程1执行完毕。\n"); return NULL; } // 线程2的执行逻辑 void* thread_meth…...
处理 Linux 信号:进程控制与异常管理的核心
个人主页:chian-ocean 文章专栏-Linux 前言: 在 Linux 操作系统中,信号是用于进程间通信的一种机制,能够向进程发送通知,指示某些事件的发生。信号通常由操作系统内核、硬件中断或其他进程发送。接收和处理信号是 Li…...
【蓝桥杯每日一题】4.1
🏝️专栏: 【蓝桥杯备篇】 🌅主页: f狐o狸x "今日秃头刷题,明日荣耀加冕!" 今天我们来练习二分算法 不熟悉二分算法的朋友可以看:【C语言刷怪篇】二分法_编程解决算术问题-CSDN博客 …...
分享系列项目的基础项目
本人分享了一系列的框架项目,它们共同需要依赖这个公共基础,结构如下图所示: 其中: audit: JPA的审计信息基础类auth:认证授权相关类config: 包括redis配置,client中token配置,openai文档配置…...
为 MinIO AIStor 引入模型上下文协议(MCP)服务器
Anthropic 最近宣布的模型上下文协议 (MCP) 将改变我们与技术交互的方式。它允许自然语言通信替换许多任务的复杂命令行语法。不仅如此,语言模型还可以总结传统工具的丰富输出,并以人类可读的形式呈现关键信息。MinIO 是世界领先的…...
spring boot前后端开发上传文件时报413(Request Entity Too Large)错误的可能原因及解决方案
可能原因及解决方案 1. Spring Boot默认文件大小限制 原因:Spring Boot默认单文件最大为1MB,总请求体限制为10MB。解决方案: 在application.properties中配置:spring.servlet.multipart.max-file-size10MB # 单文件最大 spring…...
数据结构实验1.1: 顺序表的操作及其应用
这里写自定义目录标题 一、实验目的二、注意事项三、实验内容(一)问题描述(二)基本要求 四,操作步骤(一)使用visual studio集成环境编写程序 五,示例代码六,运行效果 一、…...
基于yolov11的汽车损伤检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
【算法介绍】 基于YOLOv11的汽车损伤检测系统是一种先进的计算机视觉技术,旨在快速准确地识别汽车的各种损伤类型。该系统利用YOLOv11模型的强大性能,实现了对车辆损伤的精确检测与分类。 该系统能够识别的损伤类型包括裂纹(crackÿ…...
