# 【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);
}