unity3d————范围检测
目录
知识点一:什么是范围检测
知识点二:如何进行范围检测
问题:
Physics.queriesHitTriggers 怎么查看是不是true?
QueryTriggerInteraction.UseGlobal 参数意味着是否检测触发器将依据全局设置 Physics.queriesHitTriggers 来决定 能不能通俗易懂讲解?
1. 球形范围检测(Sphere)
2. 非分配球形范围检测(Sphere NonAlloc)
3. 胶囊形范围检测(Capsule)
4. 非分配胶囊形范围检测(Capsule NonAlloc)
代码补全
知识点一:什么是范围检测
范围检测是一种在游戏开发中常用的技术,用于判断某个特定区域内是否存在游戏对象。这种检测通常是瞬时的,用于实现如技能伤害、效果施加等不需要物理碰撞响应的交互。
-
应用场景:
- 玩家释放技能,如地刺或火球,需要判断技能范围内是否有敌人。
- 玩家使用近战攻击,需要判断周围一定范围内是否有可攻击的目标。
- 游戏中的区域触发事件,如进入特定区域触发剧情或机关。
-
特点:
- 范围检测不涉及物理碰撞的响应,如弹力或摩擦力。
- 范围检测可以是瞬时的,也可以是持续的(如每帧检测)。
知识点二:如何进行范围检测
-
必备条件:
- 想要被范围检测到的对象必须具备碰撞器(Collider),因为范围检测是基于碰撞器的形状和位置进行的。
-
注意点:
- 范围检测API只在执行该代码时进行一次检测,它是瞬时的。
- 范围检测API并不会真正产生一个碰撞器,它只是进行碰撞判断计算。
-
范围检测API:
- 盒状范围检测(OverlapBox):
- 参数:
- 参数一:立方体中心点(Vector3)
- 参数二:立方体三边大小(Vector3)
- 参数三:立方体角度(Quaternion)
- 参数四:检测指定层级(LayerMask)
- 参数五:是否忽略触发器(QueryTriggerInteraction)
- 返回值:在该范围内的碰撞器数组(Collider[])
- 参数:
- 盒状范围检测(OverlapBox):
-
其他范围检测API:
- 球状范围检测(OverlapSphere):
- 参数一:球体中心点
- 参数二:球体半径
- 参数三:检测指定层级
- 参数四:是否忽略触发器
- 返回值:在该范围内的碰撞器数组
- 胶囊状范围检测(OverlapCapsule):
- 参数一:胶囊的中心点
- 参数二:胶囊的半径
- 参数三:胶囊的高度
- 参数四:胶囊的角度
- 参数五:检测指定层级
- 参数六:是否忽略触发器
- 返回值:在该范围内的碰撞器数组
- 球状范围检测(OverlapSphere):
-
层级检测:
- 通过
LayerMask.NameToLayer方法可以通过层级名称获取层级编号。 - 使用位运算(左移)构建二进制数来表示想要检测的层级。
- 层级编号是0~31,对应一个int数的32位。
- 通过
-
示例代码:
using UnityEngine;public class RangeDetectionScript : MonoBehaviour
{void Update(){// 盒状范围检测示例Vector3 center = new Vector3(5, 0, 0); // 中心点Vector3 halfExtents = new Vector3(1, 1, 1); // 半大小Quaternion direction = Quaternion.identity; // 角度LayerMask layerMask = (1 << LayerMask.NameToLayer("Enemy")); // 只检测"Enemy"层Collider[] hits = Physics.OverlapBox(center, halfExtents, direction, layerMask);foreach (var hit in hits){Debug.Log("检测到对象:" + hit.gameObject.name);}}
}
int uiLayer = LayerMask.NameToLayer("UI");
int defaultLayer = LayerMask.NameToLayer("Default");
Collider[] colliders = Physics.OverlapBox(Vector3.zero, Vector3.one, Quaternion.AngleAxis(45, Vector3.up),(1 << uiLayer) | (1 << defaultLayer), QueryTriggerInteraction.UseGlobal);for (int i = 0; i < colliders.Length; i++)
{Debug.Log(colliders[i].gameObject.name);
}// 使用Physics.OverlapBoxNonAlloc进行范围检测,传入一个数组进行存储
int count = Physics.OverlapBoxNonAlloc(Vector3.zero, Vector3.one, colliders, Quaternion.AngleAxis(45, Vector3.up),(1 << uiLayer) | (1 << defaultLayer), QueryTriggerInteraction.UseGlobal);
if (count > 0)
{Debug.Log("检测到 " + count + " 个碰撞器");
}
问题:
Physics.queriesHitTriggers 怎么查看是不是true?
-
通过 Unity 编辑器界面检查:
- 打开 Unity 编辑器。
- 转到 "Edit" > "Project Settings" > "Physics"(在 Unity 2020 及以后的版本中,这个选项可能在 "Edit" > "Settings" > "Project" > "Physics" 中)。
- 查看 "Queries Hit Triggers" 选项。如果这个选项被勾选,那么
Physics.queriesHitTriggers的值就是true;如果没有勾选,那么它的值就是false。
QueryTriggerInteraction.UseGlobal 参数意味着是否检测触发器将依据全局设置 Physics.queriesHitTriggers 来决定 能不能通俗易懂讲解?
这里的“全局老大”指的是Unity的一个全局设置,名字叫做 Physics.queriesHitTriggers。这个设置决定了在物理查询中是否考虑触发器。
- 如果
Physics.queriesHitTriggers设置为true(开启状态),那么使用QueryTriggerInteraction.UseGlobal时,物理查询(比如Physics.OverlapBox)就会检测触发器。 - 如果
Physics.queriesHitTriggers设置为false(关闭状态),那么即使使用了QueryTriggerInteraction.UseGlobal,物理查询也不会检测触发器。
简单来说,QueryTriggerInteraction.UseGlobal 就是让物理查询是否检测触发器,取决于Unity编辑器中的那个全局设置。如果全局设置允许检测触发器,它就检测;如果全局设置不允许,它就不检测。这样,你可以通过修改全局设置来统一控制所有物理查询是否检测触发器,而不需要在每个物理查询中单独设置。
1. 球形范围检测(Sphere)
- 用途:用于检测指定球形区域内的对象。
- 参数:
- 参数一:球体中心点(
Vector3)。 - 参数二:球体半径(
float)。 - 参数三:检测指定层级(
LayerMask)。如果不填,则检测所有层。 - 参数四:是否忽略触发器(
QueryTriggerInteraction)。UseGlobal使用全局设置,Collide检测触发器,Ignore忽略触发器。
- 参数一:球体中心点(
- 返回值:在该球形范围内的碰撞器数组(
Collider[])。
2. 非分配球形范围检测(Sphere NonAlloc)
- 用途:与
OverlapSphere类似,但使用预先分配的数组来存储结果,提高性能。 - 参数:
- 参数一:球体中心点(
Vector3)。 - 参数二:球体半径(
float)。 - 参数三:用于存储结果的碰撞器数组(
Collider[])。
- 参数一:球体中心点(
- 返回值:碰撞到的碰撞器数量(
int)。
3. 胶囊形范围检测(Capsule)
- 用途:用于检测指定胶囊形区域内的对象。
- 参数:
- 参数一:胶囊的一个中心点(
Vector3)。 - 参数二:胶囊的另一个中心点(
Vector3)。 - 参数三:胶囊的半径(
float)。 - 参数四:检测指定层级(
LayerMask)。如果不填,则检测所有层。 - 参数五:是否忽略触发器(
QueryTriggerInteraction)。UseGlobal使用全局设置,Collide检测触发器,Ignore忽略触发器。
- 参数一:胶囊的一个中心点(
- 返回值:在该胶囊形范围内的碰撞器数组(
Collider[])。
4. 非分配胶囊形范围检测(Capsule NonAlloc)
- 用途:与
OverlapCapsule类似,但使用预先分配的数组来存储结果,提高性能。 - 参数:
- 参数一:胶囊的一个中心点(
Vector3)。 - 参数二:胶囊的另一个中心点(
Vector3)。 - 参数三:胶囊的半径(
float)。 - 参数四:用于存储结果的碰撞器数组(
Collider[])。
- 参数一:胶囊的一个中心点(
- 返回值:碰撞到的碰撞器数量(
int)。
代码补全
using UnityEngine;public class RangeDetectionScript : MonoBehaviour
{void Start(){// 球形范围检测int defaultLayer = LayerMask.NameToLayer("Default");Collider[] colliders = Physics.OverlapSphere(Vector3.zero, 5, 1 << defaultLayer, QueryTriggerInteraction.UseGlobal);foreach (var collider in colliders){Debug.Log("球形检测到对象:" + collider.gameObject.name);}// 非分配球形范围检测Collider[] sphereBuffer = new Collider[100]; // 假设最多检测100个int sphereCount = Physics.OverlapSphereNonAlloc(Vector3.zero, 5, sphereBuffer, 1 << defaultLayer, QueryTriggerInteraction.UseGlobal);for (int i = 0; i < sphereCount; i++){Debug.Log("非分配球形检测到对象:" + sphereBuffer[i].gameObject.name);}// 胶囊形范围检测int uiLayer = LayerMask.NameToLayer("UI");colliders = Physics.OverlapCapsule(Vector3.zero, Vector3.up, 1, 1 << uiLayer, QueryTriggerInteraction.UseGlobal);foreach (var collider in colliders){Debug.Log("胶囊形检测到对象:" + collider.gameObject.name);}// 非分配胶囊形范围检测Collider[] capsuleBuffer = new Collider[100]; // 假设最多检测100个int capsuleCount = Physics.OverlapCapsuleNonAlloc(Vector3.zero, Vector3.up, 1, capsuleBuffer, 1 << uiLayer, QueryTriggerInteraction.UseGlobal);for (int i = 0; i < capsuleCount; i++){Debug.Log("非分配胶囊形检测到对象:" + capsuleBuffer[i].gameObject.name);}}
}
相关文章:
unity3d————范围检测
目录 知识点一:什么是范围检测 知识点二:如何进行范围检测 问题: Physics.queriesHitTriggers 怎么查看是不是true? QueryTriggerInteraction.UseGlobal 参数意味着是否检测触发器将依据全局设置 Physics.queriesHitTrigge…...
修改this.$confirm的按钮位置、图标、文字及标题
在Vue.js项目中,this.$confirm 通常是基于某些UI库(如Element UI或Ant Design Vue)的对话框确认方法。 以下是基于Element UI的this.$confirm的用法示例。 在此之前,你的项目要已经安装了Element UI,如果没安装话就打…...
SQL MID() 函数详解
SQL MID() 函数详解 SQL 中的 MID() 函数是一个非常有用的字符串处理工具,它允许用户从字符串中提取特定位置的子字符串。这个函数在数据库查询和报告中特别有用,尤其是在需要从较长的文本字段中提取特定信息时。本文将详细介绍 MID() 函数的用法、参数…...
【蓝桥杯备赛】123(前缀和的复杂应用)
5. 前缀和的复杂应用 5.1. 123(4 星) 5.1.1. 题目解析 这道题仍然是求一段区间的和,很容易能够想到前缀和找规律: 1------------------1 号块 1 2----------------2 号块 1 2 3--------------3 号块 1 2 3 4------------4 号…...
MINES
MINES (m)6A (I)dentification Using (N)anopor(E) (S)equencing Tombo(v1.4) 命令在 MINES 之前执行: (仅在 fast5 文件中尚未包含 fastq 时需要) tombo preprocess annotate_raw_with_fastqs --fast5-basedir /fast5_dir/ --fastq-file…...
H.265流媒体播放器EasyPlayer.js H5流媒体播放器关于如何查看手机端的日志信息并保存下来
现今流媒体播放器的发展趋势将更加多元化和个性化。人工智能的应用将深入内容创作、用户体验优化等多个方面,带来前所未有的个性化体验。 EasyPlayer.js H.265流媒体播放器属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放&#…...
uni-app快速入门(十一)--常用JS API(上)
在前面学习了uni-app的布局、组件、路由等知识点以后,还要掌握uni-app的JS API ,也可以理解为基于uni-app的java script。本节介绍uni-app的request请求、文件上传、数据缓存、获取位置、获取系统信息、获取手机的网络状态、拨打电话API。 一、request请求 使用uni…...
Flink任务提交到yarn上slot数量为0的问题
现象:Flink提交到yarn上slot数量为0的问题 解决方法: 参考论坛上的方案,修改flink-conf.yaml文件都不管用 最终解决方法: $FLINK_HOME/lib 路径下有2个非.jar结尾的文件,把这几个文件移走之后,再启就可…...
vue3怎么根据字符串获取组件实例
例子: 我在使用vue2开发的时候,定义了一个方法 handler(strRef){ this.$refs[strRef].innerText hello world }, 我在点击某个按钮的时候,调用了方法handler,传递了一个参数是字符串 condition,然后方法…...
ISUP协议视频平台EasyCVR私有化视频平台新能源汽车充电停车管理方案的创新与实践
在环保意识提升和能源转型的大背景下,新能源汽车作为低碳出行的选择,正在全球迅速推广。但这种快速增长也引发了充电基础设施短缺和停车秩序混乱等挑战,特别是在城市中心和人口密集的居住区,这些问题更加明显。因此,开…...
智领未来: 宏集物联网HMI驱动食品与包装行业迈向智能化新高度
行业现状与挑战 食品与包装行业对设备的自动化、智能化水平要求日益提高,特别是瓶装和灌装生产线需要实现高速、高效的生产。此外,该行业还需遵循严格的卫生标准和安全规范,以保证产品质量符合消费者需求。在提高生产效率的同时,…...
redis-击穿、穿透、雪崩
击穿、穿透、雪崩经常听人说吧? 那他到底是啥呢?无非就是在有缓存层的情况下,对各种绕过缓存层从而直接落到了DB上的情况进行的分类。 概念性的东西大概如下,我是记不住,后期具体使用与规避这些问题才是大事ÿ…...
【Redis】服务器异常重启,导致redis启动失败
redis启动失败日志提示信息:Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename> 错误日志示例图(看最后一句) 错误原因解析 这个错误通常是由于Redis的…...
Springboot+Vue的项目搭建(三)
一、拦截器 拦截器(Interceptor)是一种重要的软件设计模式,它在程序执行过程中能够拦截或截取特定的操作或事件,并在操作发生之前、之后或替代操作本身进行自定义的处理。以下是对拦截器知识点的详细归纳: 拦截器的定…...
【Word】一键批量引用论文上标——将正文字体改为上标格式
【Word】一键批量引用论文上标——将正文字体改为上标格式 写在最前面Word一键批量引用论文上标技巧分享核心思路:Word 替换功能 通配符步骤详解1. 打开 Word 替换功能2. 输入通配符模式3. 设置替换格式为上标4. 批量替换 实际效果展示技巧扩展 🌈你好呀…...
DAY1 网络编程(TCP客户端服务器)
作业: TCP客户端服务器。 server服务器代码: #include <myhead.h> #define IP "192.168.110.52" #define PORT 8886 #define BACKLOG 20 int main(int argc, const char *argv[]) {int oldfdsocket(AF_INET,SOCK_STREAM,0);//IPV4通信…...
如何在Ubuntu当中利用CloudCompare软件进行点云配准拼接?
1.首先需要安装相应的cloudcompare软件,以下有两种方式:第一种直接在ubuntu的软件商店里搜索CloudCompare软件进行install,我这里已经安装完毕。 方式二:可以直接原码安装: github地址: https://github.co…...
AWTK 最新动态:支持鸿蒙系统(HarmonyOS Next)
HarmonyOS是全球第三大移动操作系统,有巨大的市场潜力,在国产替代的背景下,机会多多,AWTK支持HarmonyOS,让AWTK开发者也能享受HarmonyOS生态的红利。 AWTK全称为Toolkit AnyWhere,是ZLG倾心打造的一套基于C…...
vue数据变化但页面不变
记录一下vue中数据变了 但是页面没有变化的几种情况和解决办法 情况一:vue无法检测实例不存在于data中的变量 原因:由于 Vue 会在初始化实例时对data中的数据执行getter/setter转化,所以变量必须在data对象上存在才能让Vue将它转化成响应式…...
Leetcode128. 最长连续序列(HOT100)
链接 第一次错误提交: class Solution { public:int longestConsecutive(vector<int>& nums) {int n nums.size();int res 0;sort(nums.begin(),nums.end());//第一次错误写作:sort(nums,numsn);nums是std::vector<int>类型…...
DepthAnything(4): 基于TensorRT在Jetson平台实现DepthAnything模型的高效部署与性能优化
1. 为什么要在Jetson上部署DepthAnything? DepthAnything作为通用深度估计模型,能够处理各种复杂场景下的图像深度信息提取。但在边缘设备上直接运行原始PyTorch模型往往会遇到性能瓶颈,特别是Jetson这类资源受限的平台。我去年在Jetson Xavi…...
单细胞多组学避坑指南:5个影响GRN推断准确性的关键因素(附GRETA测试数据)
单细胞多组学避坑指南:5个影响GRN推断准确性的关键因素 在单细胞多组学研究中,基因调控网络(GRN)的推断是揭示细胞功能调控机制的核心环节。然而,许多实验室在分析过程中常遇到结果不稳定、重复性差的问题——这往往源…...
nodejs+vue基于springboot的家庭物流车辆货车运输运营管理系统可视化qlxl72h7
目录技术栈选择系统模块设计开发步骤可视化集成测试与部署注意事项项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术栈选择 后端框架: Spring Boot 提供RESTful API支持,集成MyBatis或J…...
避开这个坑!MATLAB读取CSV表头时90%人会犯的索引错误
MATLAB处理CSV表头时的三大陷阱与专业解决方案 在数据分析的日常工作中,CSV文件无疑是最常见的数据交换格式之一。作为MATLAB用户,我们经常需要处理带有表头的CSV文件,但正是在这个看似简单的操作中,隐藏着几个容易让人栽跟头的陷…...
STM32CubeMX工程Keil编译慢?3个实用技巧让你的编译速度飞起来
STM32CubeMX工程Keil编译慢?3个实用技巧让你的编译速度飞起来 每次点击编译按钮后,看着Keil进度条缓慢移动,是不是感觉时间仿佛被拉长了?特别是当你只是修改了一行代码,却要等待漫长的全量编译过程。这种体验对于使用…...
FRCRN语音降噪工具效果展示:方言语音(粤语/四川话)降噪可懂度验证
FRCRN语音降噪工具效果展示:方言语音(粤语/四川话)降噪可懂度验证 1. 引言:方言降噪,一个被忽视的刚需 想象一下这个场景:一位在广东工厂工作的工程师,正通过语音通话向远在四川的同事远程指导…...
春联生成模型-中文-base生成效果展示:多组祝福词对联作品集锦
春联生成模型-中文-base生成效果展示:多组祝福词对联作品集锦 1. 模型效果概览 春节将至,家家户户都开始准备贴春联。传统春联创作需要深厚的文学功底,而如今AI技术让这一过程变得简单有趣。春联生成模型-中文-base是达摩院AliceMind团队基…...
Kubernetes可视化监控:如何一眼看穿集群健康状态
Kubernetes可视化监控:如何一眼看穿集群健康状态 【免费下载链接】kube-ops-view Kubernetes Operational View - read-only system dashboard for multiple K8s clusters 项目地址: https://gitcode.com/gh_mirrors/ku/kube-ops-view 引言:Kuber…...
PyCharm中TensorBoard报错?三步搞定环境变量配置(附常见路径查找技巧)
PyCharm中TensorBoard报错?三步搞定环境变量配置(附常见路径查找技巧) 当你在PyCharm中兴奋地准备启动TensorBoard来可视化训练过程时,却遭遇了"无法识别tensorboard"的错误提示,这种挫败感我深有体会。作为…...
永磁同步电机坐标变换:从静止到旋转的数学解析
1. 永磁同步电机坐标变换的物理意义 第一次接触永磁同步电机控制时,我被各种坐标系搞得晕头转向。静止坐标系、旋转坐标系、αβ坐标系、dq坐标系...这些概念就像一团乱麻。直到有一天,我盯着电机转子旋转时突然明白:坐标变换的本质就是换个角…...
