首页 > 其他分享 >物理系统——范围检测

物理系统——范围检测

时间:2023-11-12 15:34:52浏览次数:27  
标签:触发器 层级 检测 碰撞 参数 物理 范围

范围检测

碰撞产生必要条件

至少一个物体有刚体

两个物体都必须有碰撞器

碰撞与触发

碰撞会产生实际的物理效果

触发看起来不会产生碰撞但是可以通过函数监听触发

碰撞检测主要用于实体物体间产生物理效果时使用

什么是范围检测

游戏中瞬时的攻击范围判断一般会使用范围检测

如何进行范围检测

条件:必须具备碰撞体

注意:只有当执行该句代码时进行一次范围检测,不会产生碰撞器,只是碰撞判断计算

范围检测API
盒状范围检测

Physics.OverLapBox(Vector.zero,Vector.one,Quaternion.AngleAxis(45,Vector3.up),1<< LayerMask.NameToLayer(层级名称)),QueryTriggerInteraction.UseGlobal)

参数一:立方体中心点

参数二:立方体三边大小

参数三:立方体角度

参数四:检测指定层级(不填检测所有层)

参数五:是否忽略触发器(UseGlobal:使用全局设置,Collide:检测触发器,Ignore:忽略触发器,不填默认UseGlobal)

返回值:在该范围内的触发器(得到了对象触发器就可以得到对象的所有信息)

球形范围检测

Physics.OverlapSphere(Vector3.zero,5,1<<LayerMask.NameToLayer(层级名称),QueryTriggerInteraction.UseGlobal)

参数一:中心点

参数二:球半径

参数三:检测指定层级(不填检测所有层)

参数四:是否忽略触发器

胶囊范围检测

Physics.OverlapCapsule((Vector3.zero,Vector3.up,1,1<<LayerMask.NameToLayer(层级名称),QueryTriggerInteraction.UseGlobal)

参数一:半圆一中心点(上半圆)

参数二:半圆二中心点(下半圆)

参数三:半圆半径

参数四:检测指定层级(不填检测所有层)

参数五:是否忽略触发器

返回值:在该范围内的触发器(得到对象触发器就可以得到对象所有信息)

Physics.OverlapBoxNonAlloc

可传入一个数组,将碰撞到的碰撞器数量传入该数组,返回值为数组长度

重点
关于层级

通过名字得到层级编号LayerMask.NameToLayer

需要通过编号左移构建二进制数

这样每个编号层级都是对应位为1的2进制数

通过位运算可以选择想要检测的层级

好处:一个int就可以表示所有想要检测的层级信息

层级编号是0~31刚好32位

是一个int数

每个编号代表的都是二进制的一位

0—1<<0—0000 0000 0000 0000 0000 0000 0000 0001 = 1

1—1<<0—0000 0000 0000 0000 0000 0000 0000 0010 = 2

2—1<<0—0000 0000 0000 0000 0000 0000 0000 0100 = 4

3—1<<0—0000 0000 0000 0000 0000 0000 0000 1000 = 8

4—1<<0—0000 0000 0000 0000 0000 0000 0001 0000 = 16

5—1<<0—0000 0000 0000 0000 0000 0000 0010 0000 = 32

例如:

待检测层:1 << LayerMask.NameToLayer("UI"),该层二进制为:Convert.ToString(1 << LayerMask.NameToLayer("UI"),2) = 100000

检测指定层:1 << LayerMask.NameToLayer("Water") | 1 << LayerMask.NameToLayer("Default") | 1 << LayerMask.NameToLayer("UI"),该所有层二进制为:Convert.ToString((1 << LayerMask.NameToLayer("Water") | 1 << LayerMask.NameToLayer("Default") | 1 << LayerMask.NameToLayer("UI")),2) = 110001

根据二进制位与(&)规则: 二进制位与运算符用来比较两个二进制数的每一位。如果两个数的同一位都是 1,那么结果就是 1,否则结果就是 0

110001

100000

从右往左比较,下标从0开始,第5位两个数都为1,结果为1,而“UI”层的层级编号是5,所以“UI”层在检测范围内

总结

范围检测主要用于瞬时碰撞范围检测

主要掌握球形,盒状,胶囊三种API即可

标签:触发器,层级,检测,碰撞,参数,物理,范围
From: https://www.cnblogs.com/zerobeyond/p/17827257.html

相关文章

  • CMOS 图像传感器AR0144CSSC20SUKA0-CPBR、AR0144CSSC20SUKA0-CRBR适用于扫描和工业检
    典型应用•条形码扫描•3D扫描•虚拟/增强现实•位置跟踪•手势识别•机器视觉•生物特征扫描器件:AR0144CSSC20SUKA0-CPBR、AR0144CSSC20SUKA0-CRBR产品描述:CMOS图像传感器,数字型,全局快门,1.0MP,1/4"产品种类:图像传感器类型:CMOS像素大小:3µmx3µm有源像素阵列:1280H......
  • 下面哪些方式在同一个窗口下能够检测一个js对象是数组类型?
    下面哪些方式在同一个窗口下能够检测一个js对象是数组类型?AArray.isArray()BinstanceofCtypeofDObject.prototype.toString.call()正确答案:ABDA:Array为js的原生对象,它有一个静态方法:Array.isArray(),能判断参数是否为数组B:instanceof运算符返回一个布尔值,表示对象是......
  • 1.两个数的最大公约数;2.输出某个范围的素数
    给定两个数,求其最大公约数#include<stdio.h>intmain(){ intm=24,n=18,r=0; while(m%n)//辗转相除法,改成"while(r=m%n)",下面的"r=m%n"可以省略 { r=m%n; m=n; n=r; } printf("%d\n",n); return0; }输出100-200内的素数#include<stdio.h>......
  • 请问以下两次检测对象constructor是否拥有属性名1的结果分别是什么?
    请问以下两次检测对象constructor是否拥有属性名1的结果分别是什么?1inObject(1.0).constructor;Number[1]=123;1inObject(1.0).constructor;false、true实际上Object(1.0)就是将数字“1.0”封装成它对应的包装类的一个对象实例比如Number(1.0),所以目的是为了检测1是否在Nu......
  • typeof只能检测数据类型,而不能检测从数据类型中派生的其他类型,数组为object派生对象,所
    typeof[]返回值为objecttypeof只能检测数据类型,而不能检测从数据类型中派生的其他类型,数组为object派生对象,所以依然返回objecttypeof判断引用类型数据,除了function以外都会判断成为objectfunctionfn(){console.log(1);}conso......
  • Wazuh开源入侵检测和威胁预防的部署和应用案例
    基本介绍Wazuh是一个免费的开源平台,用于威胁预防、检测和响应。它能够跨本地、虚拟化、容器化和基于云的环境保护工作负载。Wazuh解决方案由部署到受监控系统的端点安全代理和管理服务器组成,该服务器收集和分析代理收集的数据。此外,Wazuh已与ElasticStack完全集成,提供搜索引......
  • ACCESS 使用API函数检测shift的状态
    如果是放在   窗体模块   中:PrivateDeclareFunctionGetKeyStateLib"user32"(ByValnVirtKeyAsLong)AsInteger如果是放在  模块      中:PublicDeclareFunctionGetKeyStateLib"user32"(ByValnVirtKeyAsLong)AsInteger调用......
  • 深度学习---关键点检测
    前面介绍了分类、目标检测、分割以及一些常见模型和实现,这一篇接着介绍关键点检测的相关深度学习方法。已经有一些文章记录了关键点在不同领域的应用,比如:人脸关键点检测综述和人体骨骼关键点检测综述,其比较详细介绍了人脸检测和骨骼点检测方面的一些论文,其他还有手势识别、服饰......
  • 通常先进行目标检测,然后再进行关键点检测
    通常先进行目标检测,然后再进行关键点检测。目标检测的目的是识别图像或视频中特定的物体或对象,而关键点检测则是识别图像或视频中的重要区域或特征。在目标检测之后,我们可以更好地理解图像或视频中的内容,并确定哪些区域可能是关键点。具体来说,目标检测算法通常会扫描整个图像或视频......
  • JS检测Caps Lock是否打开,实现提示【大写锁定已打开】
    实现类似这种功能可以给输入框(一般是密码框)绑定mousedown事件,然后在事件中直接使用e.getModifierState('CapsLock')可获取CapsLock(大小写切换)是否打开。getModifierState详细文档 ......