一、先说说UE5中的碰撞(Collision)

检测响应(射线)和物体响应:

Block(阻挡)
Overlap(重叠)
lgnore(忽略)

1.分别配置A和B的对象类型(Object Type)
2.分别配置A和B的碰撞响应结果(Collision Response)
3.分别配置A和B的启用碰撞设置(Collision Enabled)

A对B的碰撞响应结果 + B对A的碰撞响应结果 = 最终的碰撞结果

对象类型(Object Type)

也就是当前的对象类型,worldstatic等等,也可以自定义(项目设置->引擎->碰撞(Collision))

碰撞响应结果(Collision Response)

碰撞响应是对两种检测响应(射线)和物体响应,进行配置Block(阻挡)、Overlap(重叠)和lgnore(忽略)

碰撞设置(Collision Enabled)

No Collision(无碰撞)- 不参与任何碰撞
Query Only(仅查询)- 只响应射线/形状追踪
Physics Only(仅物理)- 只响应物理模拟
Query and Physics(查询和物理)- 两者都响应

启动OnHit和OnOverlap事件

二、OnHit和OnOverlap事件触发方法

在项目开发过程中,总会碰到两个物体,比如静态网格体、胶囊体进行碰撞事件,但有时需求不同(比如不能开启物理模拟),触发OnHit和OnOverlap事件方法主要有四种:

1.通过开启物理模拟

1)碰撞启用Collision Enabled并配置,如第一部分所述
2)两个物体之间有一方开启物理模拟

2.通过射线/形状追踪检测碰撞

1)碰撞启用Collision Enabled并配置,如第一部分所述
2)射线追踪(Line Trace)、形状追踪(Shape Trace)

3.附加到移动组件上

这种方法是直接复用现有移动系统,比如ACharacter类,有CapsuleComponent和CharacterMovementComponent组件,就有默认的碰撞设置及移动碰撞机制(Sweep)

4.通过代码移动时启用Sweep

Sweep(扫掠),Sweep是一种带形状的连续碰撞检测(CCD),它是将一个几何体(Sphere/Capsule/Box)沿着路径“扫”过去。

1)碰撞启用Collision Enabled并配置,如第一部分所述
2)蓝图或代码是开启Sweep

Sweep是UE中实现“精确移动+碰撞响应”的黄金标准,无论是飞行器、子弹、传送、还是自定义角色,都应优先考虑Sweep而非依赖物理模拟。

5.必要前置

1) 碰撞启用并配置
2) 生成Hit事件或overlap事件
3) 对象可移动性

6.cesium的flyto碰撞问题

问题:cesium插件中有flyto的方法,但它不能触发hit事件能触发overlap事件

问题原因没有找到,以下只是猜测:
FlyTo使用插值移动相机/Actor,Cesium Globe,Anchor转换地理坐标→UE坐标,坐标转换可能导致Sweep检测精度问题,也就是FlyTo后Actor的状态可能影响后续SetActorLocation的Sweep行为。