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>类型…...
【阅读笔记】Dense trajectories and motion boundary descriptors for action recognition
论文地址:Dense Trajectories and Motion Boundary Descriptors for Action Recognition | International Journal of Computer Vision 如何用一句话描述这份工作?💡 在多个尺度上,对视频序列中每一帧的密集网格上的特征点采样&a…...
React 远程仓库拉取项目部署,无法部署问题
项目场景: 提示:相关背景: React 远程仓库拉取项目部署,二次开发 问题描述 提示:项目中遇到的问题: React 远程仓库拉取项目部署,正确安装依赖后(开发混乱,造成packg…...
CSS3新特性——字体图标、2D、3D变换、过渡、动画、多列布局
目录 一、Web字体 二、字体图标 三、2D变换 1.位移 (1)浮动 (2)相对定位 (3)绝对定位和固定定位 (4)位移 用位移实现盒子的水平垂直居中 2.缩放 利用缩放调整字体到12px以下ÿ…...
前端反向代理的配置和實現
反向代理是位於客戶端和服務器之間的一個中間層,它代表客戶端向伺服器發起請求,然後將伺服器的回應返回給客戶端。與傳統的正向代理不同,反向代理是由伺服器端配置的,客戶端通常不知道它的存在。在前端開發中,反向代理…...
【K8S系列】Kubernetes Pod节点ImagePullBackOff 状态及解决方案详解【已解决】
在 Kubernetes 中,当某个 Pod 的容器无法从指定的镜像仓库拉取镜像时,Pod 的状态会变为 ImagePullBackOff。这通常是因为指定的镜像不存在、镜像标签错误、认证失败或网络问题等原因。 以下是关于 ImagePullBackOff 的详细分析及解决方案。 1. ImagePull…...
JSONObject jsonObject = JSON.parseObject(json);
是用于将一个 JSON 格式的字符串解析为一个 JSONObject 对象的语句。具体来说: JSON.parseObject(json): 作用: JSON 是 FastJSON 库提供的一个工具类。parseObject 方法可以将 JSON 格式的字符串(例如:{"key1&qu…...
软件测试之测试用例扩展
软件测试之测试用例扩展 1. 测试用例覆盖2. UI布局覆盖3. 兼容性覆盖4. 测试用例条数 1. 测试用例覆盖 规则覆盖UI布局兼容性 2. UI布局覆盖 2条用例即可 布局, 颜色与原型图一致图片和文字描述无误 3. 兼容性覆盖 测试5大浏览器 火狐谷歌ieEge苹果 4. 测试用例条数 使…...
hj 212 协议解包php解包,
这里写目录标题 什么是环保HJ212协议?常用的标准码说明php接收包解包(没有crc验证)到redis 序列化python 发包测试 什么是环保HJ212协议? HJ212是由国家环保行业制定的数据传输标准协议,通常是通过TCP/P通讯方式进行数据传输的,…...
03架构模式(D2_架构模式01)
目录 学习前言 一、架构的模式 1. 分层 2. 分隔 3. 分布式 4. 集群 5. 缓存 6. 异步 7. 冗余 8. 自动化 9. 安全 10. 敏捷性 二、参考文献 学习前言 架构演进中有很多知识点,总体上可以归结为以下模式,这里说的模式本质是架构中技术点的抽 …...
深入List集合:ArrayList与LinkedList的底层逻辑与区别
目录 一、前言 二、基本概念 三、相同之处 四、不同之处 五、ArrayList 底层 六、LinkedList 底层 七、ArrayList 应用场景 八、LinkedList 应用场景 九、ArrayList和LinkedList高级话题 十、总结 一、前言 在Java集合的广阔舞台上,ArrayList与LinkedLis…...
建立个人博客网站/seo查询 站长工具
成为伟大,影响伟大 领袖不会培养追随者,领袖培养下一代领袖。 作为第三代互联网创业者,今天的领导者们肩负着这样的时代使命。 1.激励员工全力以赴 杰克韦尔奇说,管理是控制,领导是激励。 作为伟大的领导者&#…...
手机网站怎么建立/seo免费教程
这是一道选择题,答案是:(设,收银员和顾客的私有信号量为S1和S2) a:P(Sn) ;b1:V(S1);b2:P(S2);c1:P(S1);c2: V(S2); 我是…...
邯郸建设网站/排名优化seo
2 月底万维网联盟(W3C)CSS 工作组会议宣布了一项决议,批准在 CSS 标准中加入一批新函数,其中包括: 正弦函数 - sin()余弦函数 - cos()正切函数 - tan()反余弦函数 - acos()反正弦函数 - asin()反正切函数 - atan()使用…...
辽宁网站建设墨子/焦作网络推广哪家好
英文名:DotNetTextBox V3.0 WYSWYG Web Control For Asp.Net2.0 中文名:DotNetTextBox V3.0 所见即所得编辑器控件 For Asp.Net2.0 类型: 个人及非盈利性网站免费使用 作者: 小宝.NET 2.0(Terry Deng) 主页:http://www.aspxcn.com.cn 控件演示…...
网站后台管理系统如何使用/seo属于运营还是技术
2019独角兽企业重金招聘Python工程师标准>>> 程序员在编程的时候难免会犯错误,但如果不从错误中吸取教训,那么习惯成自然,你会经常犯错的。从错误中不断的学习,锻炼好的行为习惯有助于事业上的稳定。这就是我们如何将小…...
六安哪家做网站好/推广费用一般多少钱
知乎视频www.zhihu.com在 Windows10 系统中,有这五个小秘密,你可能还不太知道。001. 任务栏的宽度是可以随意改变的。对于有的人来说,无意中会发现电脑突然任务栏变宽,不知道该怎么办。其实你只需要在任务栏上单击右键ÿ…...