UE中的碰撞检测

UE的碰撞和Unity的碰撞类似。每个碰撞体都可以选择 Object Type,这个Object Type实质上就是一个帮助我们分类的标签,并不会产生实际的作用,我们甚至可以在项目设置里面自己创建,两个Object Type之间,分为物体碰撞检测的 Object Response 和射线追踪检测的 Trace Response 两种Response类型,分为 IgnoreOverlapBlock 三种Response情况,后两者可以相应的产生 Overlap事件Hit事件,类似Unity的Trigger和Collision。

Object Response描述
Ignore忽略碰撞检测,可以重叠,与Overlap相比没有Overlap事件发生。
Overlap可以重叠,类似Unity的Trigger,若要触发 ReceiveBeginOverlapReceiveEndOverlap 事件,需要勾选 Generate Overlap Events
Block不能重叠,并非只有开启 Simulate Physics 才能发生触发 ReceiveHitOnComponentHit 事件,只要满足条件,都可以触发Hit事件,但是如果该物体开启了物理模拟,则该物体必须勾选 Simulation Generates Hit Events 才能在该物体上触发Hit事件,此选项仅与此物体触发Hit事件有关。
Trace Response描述
Visibility这个通道一般是咱们手动进行射线追踪的通道,一般不会Ignore。
Camera这个通道是世界上的摄像机进行射线追踪的通道,有时候一些物体会造成摄像机视野上出现毛病,这时候把该物体的该通道关闭,就不会让该物体影响摄像机的视野。

两个物体间Response的情况:

  • 两者必须都为Block Response,才能发生Block
  • 只要一者为Ignore Response,则只能发生Ignore
  • 只要一者为Overlap Response,则只能发生Overlap

Collision Enabled 是控制碰撞检测的总开关,有点像Unity的Is trigger,总共有四个选项,官方文档写的非常详细了,我说一下比较常用的理解方法,Query 决定能否被射线追踪检测到,能否发生Overlap;Physic 决定能否发生Block。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

### UE5碰撞检测函数使用教程 #### 获取并设置碰撞组件 为了实现有效的碰撞检测,在虚幻引擎5 (UE5) 中,通常会先获取装备的武器中的碰撞组件。这可以通过调用特定于Actor蓝图类的方法来完成,该方法返回关联的`UShapeComponent`或其他类型的碰撞组件[^1]。 ```cpp // C++ 示例:获取武器上的碰撞组件 UShapeComponent* WeaponCollisionComp = Cast<UShapeComponent>(WeaponActor->GetComponentByClass(UShapeComponent::StaticClass())); if (WeaponCollisionComp != nullptr) { // 对获得的碰撞组件执行操作... } ``` #### 执行射线追踪查询 对于更复杂的交互需求,如射击游戏中的命中判定,则可以利用`LineTraceSingleByChannel`或`LineTraceSingleByObjectType`来进行精确的位置探测。这些功能允许开发者指定起点和终点,并沿直线路径测试是否存在障碍物[^2]。 ```cpp FHitResult Hit; FCollisionQueryParams TraceParams(FName(TEXT("")), false, GetOwner()); bool bHit = GetWorld()->LineTraceSingleByChannel( Hit, StartLocation, EndLocation, ECollisionChannel::ECC_Visibility, TraceParams); if(bHit){ // 处理击中目标后的逻辑... } ``` #### 注册事件响应 为了让物体能够感知周围环境的变化,还可以注册各种形式的事件监听器,比如当发生重叠(`OnComponentBeginOverlap`)或是结束接触(`OnComponentEndOverlap`)时触发相应的回调处理程序。 ```cpp // 动态绑定事件处理器至碰撞组件上 WeaponCollisionComp->OnComponentBeginOverlap.AddDynamic(this,&AYourCharacter::HandleBeginOverlap); void AYourCharacter::HandleBeginOverlap(UPrimitiveComponent* OverlappedComponent,AActor* OtherActor, UPrimitiveComponent* OtherComp,int32 OtherBodyIndex,bool bFromSweep,const FHitResult& SweepResult){ // 实现具体业务逻辑... } ``` 通过上述方式可以在UE5项目内构建起一套完整的物理反馈机制,不仅限于简单的触碰反应,还包括基于视线、声音传播等多种维度的空间关系判断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-木水水-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值