【虚幻C++笔记】碰撞检测

虚幻C++碰撞检测参数与用法

碰撞检测

显示名称 中文名称 C++
Sphere Trace By Channel 按通道进行球体追踪 UKismetSystemLibrary::SphereTraceSingle
Sphere Trace By Profile 按描述文件进行球体追踪 UKismetSystemLibrary::SphereTraceSingleByProfile
Sphere Trace For Objects 针对Object进行球体追踪 UKismetSystemLibrary::SphereTraceSingleForObjects
Multi Sphere Trace By Channel 按通道进行多球体追踪 UKismetSystemLibrary::SphereTraceMulti
Multi Sphere Trace By Profile 按描述文件进行多球体追踪 UKismetSystemLibrary::SphereTraceMultiByProfile
Multi Sphere Trace For Objects 针对object进行多球体追踪 UKismetSystemLibrary::SphereTraceMultiForObjects
Box Trace By Channel 按通道进行盒体追踪 UKismetSystemLibrary::BoxTraceSingle
Box Trace By Profile 按描述文件进行盒体追踪 UKismetSystemLibrary::BoxTraceSingleByProfile
Box Trace For Objects 针对Object进行盒体追踪 UKismetSystemLibrary::BoxTraceSingleForObjects
Multi Box Trace By Channel 按通道进行多盒体追踪 UKismetSystemLibrary::BoxTraceMulti
Multi Box Trace By Profile 按描述文件进行多盒体追踪 UKismetSystemLibrary::BoxTraceMultiByProfile
Multi Box Trace For Objects 针对object进行多盒体追踪 UKismetSystemLibrary::BoxTraceMultiForObjects
Line Trace By Channel 按通道进行线条追踪 UKismetSystemLibrary::LineTraceSingle
Line Trace By Profile 按描述文件进行线条追踪 UKismetSystemLibrary::LineTraceSingleByProfile
Line Trace For Objects 针对object进行线条追踪 UKismetSystemLibrary::LineTraceSingleForObjects
Multi Line Trace By Channel 按通道进行多线条追踪 UKismetSystemLibrary::LineTraceMulti
Multi Line Trace By Profile 按描述文件进行多线条追踪 UKismetSystemLibrary::LineTraceMultiByProfile
Multi Line Trace For Objects 针对object进行多线条追踪 UKismetSystemLibrary::LineTraceMultiForObjects
Capsule Trace By Channel 按通道进行胶囊体追踪 UKismetSystemLibrary::CapsuleTraceSingle
Capsule Trace By Profile 按描述文件进行胶囊体追踪 UKismetSystemLibrary::CapsuleTraceSingleByProfile
Capsule Trace For Objects 针对object进行胶囊体追踪 UKismetSystemLibrary::CapsuleTraceSingleForObjects
Multi Capsule Trace By Channel 按通道进行多胶囊体追踪 UKismetSystemLibrary::CapsuleTraceMulti
Multi Capsule Trace By Profile 按描述文件进行多胶囊体追踪 UKismetSystemLibrary::CapsuleTraceMultiByProfile
Multi Capsule Trace For Objects 针对object进行多胶囊体追踪 UKismetSystemLibrary::CapsuleTraceMultiForObjects

参数详情

输入引脚

  • Start:射线起点的位置。
  • End:射线终点的位置。
  • Radius:球体的半径。
  • Trace Channel:碰撞通道,用于指定哪些类型的物体可以被检测到。常见的通道包括 Visibility、Camera、WorldStatic 等。
  • bTrace Complex:是否启用复杂碰撞几何体的检测。如果设置为 True,则会检测复杂的静态网格体;如果设置为 False,则只检测简单的碰撞盒。
  • bFind Initial Overlap:是否检测初始重叠。如果设置为 True,则会在起点处检测是否有重叠的物体。
  • bIgnore Self:是否忽略自身物体的碰撞。如果设置为 True,则不会检测到执行该节点的物体本身。
  • Actor to Ignore:需要忽略的特定 Actor。你可以在这里指定一个或多个 Ac
### 虚幻引擎碰撞检测优化技巧 在虚幻引擎中,碰撞检测是一项非常耗费性能的任务,尤其是在复杂场景下。以下是几种常见的优化方法和技巧: #### 1. 减少碰撞体数量 过多的碰撞体会显著增加计算开销。可以通过合并多个简单的碰撞体为一个复合形状来减少碰撞体的数量[^1]。这种方法不仅减少了需要处理的几何体数目,还降低了碰撞检测算法的时间复杂度。 #### 2. 合理配置碰撞通道与响应 虚幻引擎支持多种碰撞通道(Collision Channels),允许开发者定义哪些类型的物体之间应该发生碰撞反应。通过精细调整每种物体所属的碰撞组及其与其他组的关系,可以避免不必要的碰撞运算[^3]。例如,如果某些背景装饰物无需参与动态交互,则可将其设为仅触发而非阻挡。 #### 3. 利用简化网格作为代理几何体 对于高精度模型而言,在保持视觉效果的同时使用低多边形版本来进行实际物理模拟是一种有效的策略。这样既能维持外观质量又能加快内部逻辑判断速度[^3]。 #### 4. 实施分层或区域划分机制 当面对大规模开放世界时,采用空间分区技术如四叉树/八叉树或者BSP树可以帮助快速定位潜在冲突对象集合而不是遍历整个场景内的每一个实体[^3]。这极大地提高了效率特别是针对远距离间的相互作用情形。 #### 5. 动态启用/禁用碰撞组件 并非所有的游戏物件都需要持续不断地进行活跃状态下的碰撞测试。可以根据实际情况设计一套规则体系决定何时开启或关闭特定Actor上的Collider Component功能。比如敌人进入玩家视野范围之前不必关心它们之间的相对位置关系变化。 #### 6. 延迟更新非关键帧数据 如果不是即时反映出来的动作序列(例如爆炸波及效应),那么我们可以接受一定延迟去完成相应部位间接触判定过程而不至于影响整体表现流畅性。 ```cpp // 示例代码展示如何动态控制碰撞状态 ACharacter::SetActorEnableCollision(bool bNewEnabledState){ Super::SetActorEnableCollision(bNewEnabledState); if (bNewEnabledState) { GetCapsuleComponent()->SetGenerateOverlapEvents(true); } else { GetCapsuleComponent()->SetGenerateOverlapEvents(false); } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值