UE4_碰撞_射线检测不到物体原因及跳不到圈内的问题

本文介绍了虚幻引擎4中简单碰撞(如盒体、球体等)和复杂碰撞(三角网格)的区别,以及如何在StaticMeshEditor的细节面板中调整碰撞复杂度以解决碰撞检测问题。不正确设置可能导致碰撞检测失效,需根据实际需求选择合适的碰撞形态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UseSimpleAsComplex 和 UseComplexAsSimple 标记的作用和使用时间。

虚幻引擎 4 中有简单和复杂碰撞形态。 简单碰撞 是基础,如盒体、 球体、胶囊体和凸包。 复杂碰撞 是给定对象的三角网格图。 虚幻引擎 4 会默认创建简单和复杂两种形态,然后基于用户需要(复杂查询 vs 简单查询), 物理解算器会使用相应形态来进行场景查询和碰撞检测。

用法

在静态网格体编辑器(Static Mesh Editor)的 细节 面板中,你可以在 碰撞(Collision) 分类中找到 碰撞复杂度(Collision Complexity) 的设置。

问题一解决:

对于一些物体的碰撞检测,如果不设置碰撞复杂度,可能会检测不到。如下图设置:

Unreal Engine 5(UE5)中,检测多个物体碰撞可以通过多种方法实现。以下是一些常用的方法: ### 1. 使用Overlap事件 Overlap事件是UE5中常用的检测碰撞的方法。你可以在蓝图中或通过C++代码来实现。 #### 蓝图实现: 1. **添加碰撞组件**:在你的角色或物体上添加一个碰撞组件(如Box Collision、Sphere Collision等)。 2. **设置碰撞响应**:在碰撞组件的细节面板中,设置“生成重叠事件”(Generate Overlap Events)为开启。 3. **绑定事件**:在蓝图中,绑定“BeginOverlap”和“EndOverlap”事件到你的角色或物体上。 4. **处理碰撞**:在事件处理函数中,你可以获取所有重叠的物体并进行相应的处理。 #### C++实现: ```cpp // 在你的角色类中添加以下代码 virtual void NotifyActorBeginOverlap(AActor* OtherActor) override { Super::NotifyActorBeginOverlap(OtherActor); // 处理碰撞逻辑 } virtual void NotifyActorEndOverlap(AActor* OtherActor) override { Super::NotifyActorEndOverlap(OtherActor); // 处理碰撞逻辑 } ``` ### 2. 使用射线投射(Line Trace) 射线投射可以用来检测从一点到另一点的碰撞情况。 #### 蓝图实现: 1. **使用Line Trace节点**:在蓝图中,使用“Line Trace By Channel”或“Line Trace for Objects”节点。 2. **设置射线参数**:设置射线的起点、方向、长度和检测物体类型。 3. **处理检测结果**:在“Hit”节点中,你可以获取所有被射线击中的物体并进行相应的处理。 #### C++实现: ```cpp FHitResult HitResult; FVector Start = GetActorLocation(); FVector End = Start + GetActorForwardVector() * 1000.0f; FCollisionQueryParams CollisionParams; if (GetWorld()->LineTraceSingleByChannel(HitResult, Start, End, ECC_Visibility, CollisionParams)) { // 处理碰撞逻辑 } ``` ### 3. 使用物理碰撞 如果你的物体有物理属性(如Rigid Body),你可以通过物理引擎来检测碰撞。 #### 蓝图实现: 1. **设置物理属性**:在物体的细节面板中,设置“模拟物理”(Simulate Physics)为开启。 2. **绑定事件**:在蓝图中,绑定“Hit”事件到你的物体上。 3. **处理碰撞**:在事件处理函数中,你可以获取所有碰撞物体并进行相应的处理。 #### C++实现: ```cpp virtual void NotifyHit(UPrimitiveComponent* MyComp, AActor* Other, UPrimitiveComponent* OtherComp, bool bSelfMoved, FVector HitLocation, FVector HitNormal, FVector NormalImpulse, const FHitResult& Hit) override { Super::NotifyHit(MyComp, Other, OtherComp, bSelfMoved, HitLocation, HitNormal, NormalImpulse, Hit); // 处理碰撞逻辑 } ``` ### 总结 以上是几种在UE5中检测多个物体碰撞的方法。根据具体需求和场景选择合适的方法来实现碰撞检测
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Growthofnotes

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

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

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

打赏作者

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

抵扣说明:

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

余额充值