当前位置: 首页 > news >正文

Unity碰撞检测:射线与胶囊体投射/Layer(层)、LayerMask(遮罩层)

一、Physics碰撞检测

1.Physics.Raycast射线投射

Physics.Raycast 是 Unity 中用于执行射线检测(Raycasting)的方法。它允许你从一个点沿特定方向发射一条无形的“射线”,并检查这条射线是否与场景中的任何碰撞体相交。这个功能非常有用,可以用来检测玩家前方是否有障碍物、确定点击位置的对象等。

使用场景:用于检测射线是否与场景中的物体发生碰撞
触发条件:通过发射一条射线来检测碰撞
参数:参数包括射线的起点、方向、最大距离、层掩码等

bool hit = Physics.Raycast(transform.position, transform.forward, out RaycastHit hitInfo, 100f);
if (hit) {Debug.Log("Ray hit: " + hitInfo.collider.gameObject.name);
}

2.Physics.CapsuleCast胶囊体投射

Physics.CapsuleCast 是 Unity 中用于执行胶囊体投射(Capsule Cast)的方法。与 Raycast 类似,但它基于胶囊形状而非直线,这使得它非常适合用于检测具有类似胶囊形状的对象(如大多数游戏角色使用的碰撞体)在移动时是否会遇到障碍物。

使用场景: 用于检测一个胶囊体形状的射线是否与场景中的物体发生碰撞
触发条件: 通过发射一个胶囊体形状的射线来检测碰撞
参数: 参数包括起点、方向、胶囊体的半径、高度、最大距离、层掩码等

bool hit = Physics.CapsuleCast(transform.position, transform.position + Vector3.up * 2f, 1f, transform.forward, out RaycastHit hitInfo, 100f);
if (hit) {Debug.Log("CapsuleCast hit: " + hitInfo.collider.gameObject.name);
}

二、Layer(层)、LayerMask(遮罩层)

Layers通常被摄像机用来渲染部分场景,和灯光照射部分场景使用。但是它们也可以用来做射线检测时忽略一些collder或Collision使用

Unity中是用int32来表示32个Layer层。int32表示二进制一共有32位(0—31)

在Unity中每个GameObject都有Layer属性,默认的Layer都是Default。在Unity中可编辑的Layer共有24个(8—31层),官方已使用的是0—7层,默认不可编辑!

1,layer层查看与创建

任意选择场景中的一个GameObject即可查看该GameObject所在的层

 点击 Add Layer...(前面的序号是所在层序号)

 在可以编辑的地方取个一个层名即可

 新建的 layer 就会显示在层中

2.LayerMask 的介绍和使用

LayerMask 实际上是一个位码操作,在Unity3D中一共有32个Layer层,并且不可增加。

Unity 中的使用:

LayerMask mask = 1 << 3;表示开启Layer3。

LayerMask mask = 0 << 8;表示关闭Layer8。

LayerMask mask = 1<<1|1<<9;表示开启Layer1和Layer9。

LayerMask mask = 0<<4|0<<5;表示关闭Layer4和Layer5。

LayerMask mask = ~(1 << 0) 打开所有的层。

LayerMask mask = ~(1 << 9) 打开除了第9之外的层。

//LayerMask 的使用(Physics.Raycast)[SerializeField] private LayerMask ClearCounterLayerMask;float interactDictance = 2.0f;if (Physics.Raycast(transform.position, lastInteractDir, out RaycastHit raycastHit, interactDictance, ClearCounterLayerMask))
{if (raycastHit.transform.TryGetComponent(out ClearCounter clearCounter)){clearCounter.Interact();}
}

相关文章:

  • Unity3D开发AI桌面精灵/宠物系列 【六】 人物模型 语音口型同步 LipSync 、梅尔频谱MFCC技术、支持中英文自定义编辑- 基于 C# 语言开发
  • Linux云计算训练营笔记day08(MySQL数据库)
  • 【上位机——WPF】Window标签常用属性
  • 【学习心得】2025年Docker Desktop安装记录
  • 阿里云ECS部署Dify
  • 阿里云CMH镜像迁移与SMC整机迁移对比及功能详解(同地域跨主体账号场景)
  • 配置VScodePython环境Python was not found;
  • 「Java EE开发指南」如何使用MyEclipse的可视化JSF编辑器设计JSP?(二)
  • PC:使用WinSCP密钥文件连接sftp服务器
  • ANTsPy:医学影像处理python库
  • Java集合详解:LinkedBlockingQueue
  • 26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述
  • Window下Jmeter多机压测方法
  • 128.在 Vue 3 中使用 OpenLayers 实现绘制矩形截图并保存地图区域
  • OpenShift AI - 用 ModelCar 构建容器化模型,提升模型弹性扩展速度
  • IP地址、端口、TCP介绍、socket介绍、程序中socket管理
  • Golang 设计哲学
  • 用Python代码绘制动态3D爱心效果
  • AI日报 · 2025年5月15日|GPT-4.1 登陆 ChatGPT
  • 实验-时序电路设计2-存储器阵列(数字逻辑)
  • 九江宜春领导干部任前公示,3人拟提名为县(市、区)长候选人
  • 特朗普再提“接管”加沙,要将其变为“自由区”
  • “大型翻车现场”科技满满,黄骅打造现代化港口和沿海新城典范
  • 农行回应“病重老人被要求亲自取钱在银行去世”:全力配合公安机关调查
  • 四个“从未如此”使巴以加沙战火绵延时间创下历史之最
  • “85后”贵阳市政府驻重庆办事处主任吴育材拟任新职