ue4 碰撞检测测试

本文探讨了在Unreal Engine中使用setActorLocation移动及控制器移动的测试条件,详细分析了两个Cube之间的碰撞与触发事件,包括不同碰撞设置下产生的效果,以及角色与目标Cube碰撞的特殊性。同时,解释了Sweep与Teleport的作用,Sweep防止运动穿透,而Teleport使物体瞬间移动且速度保持为0。

记录几条物理相关

 

测试条件,1使用setActorLocation移动,3使用控制器的移动

1 moveCube  2 targetCube  3 Character

 

 两个Cube的碰撞事件

1和2的关系描述,先说最简单的如何产生trigger,collision事件(这里把simulation Generaes Hitevent和Generate OverlapEvents都打开,方便随时产生事件)

碰撞事件

1的设置,(要注意的是1运动时要把sweep的勾选上,否则1,2不会产生碰撞,2不会挡住1,这个sweep作用有点类似unity的运动刚体开关)


2的设置

 

 

触发事件

1    2      结果

重叠  重叠   双方产生重叠事件

重叠  阻挡   双方产生重叠事件

阻挡  重叠   双方产生重叠事件

 

阻挡  阻挡   双方不产生重叠事件(如果1的sweep没勾,也不会产生任何碰撞事件,1运动穿过2什么事件都不会发生,直接穿透)

重叠  忽略   双方不产生事件

忽略  重叠   双方不产生事件


charactor与TargetCube碰撞

的效果类似于开了sweep,会产生碰撞效果


Sweep与Teleport作用说明

Sweep用来阻止运动穿透,这个应该就是charactor不会穿透cube的原因

Teleport开启时,物体瞬间从一个位置移动到另一个位置,自身会产生一个很大的速度(瞬间移动时间很短,物理引擎正常会计算物体速度s/t,因为t很小,所以导致物体会有个很大的速度,teleport开启就不会计算这个自身的速度,物体瞬间移动后速度保持为0)

https://www.unrealengine.com/zh-CN/blog/moving-physical-objects

转载于:https://www.cnblogs.com/nafio/p/9137004.html

### 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值