# 【c++代码设置碰撞】
ECollisionChannel
定义物体之间碰撞的通道,每个枚举值代表一个碰撞通道:
- ECC_WorldStatic:静态世界物体,如墙壁、地板等。
- ECC_WorldDynamic:动态世界物体,如移动平台、可破坏物体等。
- ECC_Pawn:角色或角色驱动的物体。
- ECC_PhysicsBody:物理体,如物理模拟的物体。
- ECC_Vehicle:车辆物体。
- ECC_Destructible:可破坏物体。
- ECC_GameTraceChannel1 ~ ECC_GameTraceChannel19:用于自定义的游戏特定的碰撞通道。
- ECC_MAX:枚举类型中的最大值,用于范围检查和错误处理。
ECollisionResponse
定义物体碰撞时的响应方式:
- ECR_Ignore:忽略碰撞,物体之间的碰撞不会产生任何响应。
- ECR_Overlap:允许物体重叠,但不会产生碰撞反应,适用于触发器和检测碰撞的情况。
- ECR_Block:物体发生碰撞时会被阻挡,碰撞将产生物理反应,如弹射或停止运动。
- ECR_BlocksOnly:只允许物体阻挡,但不会自身被阻挡。
- ECR_MAX:枚举类型中的最大值,用于范围检查和错误处理。
ECollisionEnabled
定义物体的碰撞状态:
- NoCollision:物体之间忽略碰撞,不执行任何碰撞检测和响应。
- QueryOnly:物体之间进行碰撞检测,但不产生碰撞反应。
- PhysicsOnly:物体之间进行碰撞检测,并执行物理模拟。
- QueryAndPhysics:物体之间进行碰撞检测,并执行物理模拟,同时还可以查询碰撞。
# 使用示例
AWeapon::AWeapon()
{
PrimaryActorTick.bCanEverTick = false;
WeaponMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("WeaponMesh"));
WeaponMesh->SetupAttachment(RootComponent);
// 设置与所有物体都产生物理阻挡碰撞
WeaponMesh->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Block);
// 单独设置与玩家角色不碰撞
WeaponMesh->SetCollisionResponseToChannel(ECollisionChannel::ECC_Pawn, ECollisionResponse::ECR_Ignore);
// 不开启碰撞
WeaponMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);
}
← 【输入和角色移动】 【c++代码创建枚举】 →