虚幻引擎碰撞相关的属性

一、Collision Enabled
  • NoCollision
    完全禁用碰撞检测和物理模拟
    适用于不需要任何碰撞交互的静态物体和特效‌
  • QueryOnly
    可进行射线检测/重叠,不进行物理模拟
    适用于需要碰撞事件但无需物理响应的逻辑、如触发区域检测
  • PhysicsOnly
    仅参与物理模拟(刚体碰撞),不参与射线检测、Sweep、Overlap 查询
    可以触发OnComponentHit,需要开启Simulation Generates Hit Events,并发生碰撞
    适用于完全由物理驱动、不需要被 Trace 或检测的对象
  • QueryAndPhysics
    同时启用空间查询和物理模拟,性能开销最大
    适合需要物理交互且要触发事件的对象

二、Trace Channel和Object Type等相关名词
1.ECollision Channel

ECollisionChannel是真正的碰撞通道,ObjectChannel 和 TraceChannel 都是 ECollisionChannnel的子集

复制代码
enum ECollisionChannel
{
    ECC_WorldStatic,
    ECC_WorldDynamic,
    ECC_Pawn,
    ECC_PhysicsBody,
    ECC_Vehicle,
    ECC_Destructible,
    ECC_Visibility,
    ECC_Camera,
    ECC_GameTraceChannel1,
    ...
};
2. Object Channel

本质是ECollisionChannel 被蓝图包装为EObjectTypeQuery

使用它来表示物体是什么类型,可以设为物体的ObjectType,

复制代码
    ECC_WorldStatic,
    ECC_WorldDynamic,
    ECC_Pawn,
    ECC_PhysicsBody,
    ECC_Vehicle,
    ECC_Destructible,

WorldStatic :适用于所有不用移动的Actor,最好的例子就是Static Mesh Actors
WorldDynamic :适用于所有因动画或者代码影响而移动的Actor,如电梯和门
Pawn :适用于所有有玩家空的实体,例如玩家的角色
PhysicsBody :适用于所有因物理引擎模拟而运动的Actor
Vehicle :适用于所有载具,如汽车,飞机
Destructible:适用于所有可被破坏的物体,如窗户

3. Trace Channel

本质是ECollisionChannel 被蓝图包装为ETraceTypeQuery

不能设为物体的ObjectType,

复制代码
	ECC_Visibility,
	ECC_Camera,
4. Preset

Preset即为Profile,它是将CollisionEnabled\CollisionResponse\ObjectType的组合起来一个东西

三、自定义CollisionChannel
  1. 项目设置中
    依次分别是Trace Channel和Object Channel和Preset,
    新建Trace Channel和Object Channel时可以设置其他通道对这个通道的默认响应行为,一共最多可以创建1个

2.C++中 ,可以直接define 方便在C++中使用

复制代码
#define ECC_SkeletalMesh ECollisionChannel::ECC_GameTraceChannel1
#define ECC_HitBox ECollisionChannel::ECC_GameTraceChannel2

四、碰撞响应CollisionResponse
忽略 (Ignore)

效果

物体将不会与其他物体发生碰撞或交互。即使两物体在物理上重叠,它们也不会触发任何碰撞事件(例如,物理反应或触发器事件)。
应用场景

通常用于那些不需要物理互动的物体,比如子弹的射击轨迹、UI元素等。

重叠 (Overlap)

效果

物体之间可以发生重叠,即物体会穿透彼此,但不会阻止物体继续移动。碰撞事件(如 OnOverlapBegin 和 OnOverlapEnd)会被触发,可以用于响应事件或检测物体是否接触。
应用场景

适用于需要检测物体接触但不想阻止物体穿透的情况。例如,触发器、拾取物品、角色与道具的互动等。

阻挡 (Block)

效果

物体将阻挡其他物体的运动。碰撞会影响物体的物理行为,例如推开、停止或反弹。阻挡会有效防止物体穿透或重叠,并触发物理反应。
应用场景

适用于大多数实体物体,特别是角色和环境中的固体物体,例如墙壁、地面、障碍物等。

设置碰撞响应:

可以在项目设置中,设置Preset碰撞预设来调整其他通道的响应

或者在角色的碰撞体下将Preset设为Custom来调整其他通道的响应

碰撞的结果

首先 看两个物体对对方的响应,用伪代码演示为:

复制代码
ResponseA = A.ResponseTo(B.ObjectType);
ResponseB = B.ResponseTo(A.ObjectType);

然后看下图,根据ResponseA和ResponsB 得出最终结果


五、使用C++函数设置
复制代码
//设置ObjectType
CollisionBox->SetCollisionObjectType(ECollisionChannel_WorldDynamic);

//设置Collision Response
CollisionBox->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Block);
CollisionBox->SetCollisionResponseToChannel(ECollisionChannel::ECC_Camera, ECollisionResponse::ECR_Ignore);

//设置Collision Enabled
CollisionBox->SetCollisionEnabled(ECollisionEnabled::NoCollision);

//设置整个预设Preset/Profile
CollisionBox->SetCollisionProfileName(TEXT("Ragdoll"));
相关推荐
_风华ts20 小时前
虚幻引擎RPC
rpc·游戏引擎·虚幻
孟无岐1 天前
【Laya】Base64Tool 编码工具类使用说明
typescript·游戏引擎·游戏程序·laya
Howrun7771 天前
虚幻引擎_动画蓝图/混合空间/状态机_超详细教学
游戏引擎·虚幻
_风华ts1 天前
UObject复制与RPC
网络·c++·网络协议·rpc·虚幻
qianbo_insist1 天前
unity 无头模式启动
unity·游戏引擎
weixin_409383121 天前
cocos shader闪光
游戏引擎·cocos2d
Howrun7771 天前
虚幻引擎_用户小控件_准星
c++·游戏引擎·虚幻
孟无岐2 天前
【Laya】Component 使用说明
typescript·游戏引擎·游戏程序·laya
weixin_409383122 天前
cocos shader三角流光
游戏引擎·cocos2d