SetCollisionObjectType
是虚幻引擎中的一个方法,用于设置碰撞组件的碰撞对象类型。它定义了该碰撞体在物理引擎中的类别,以便确定其如何与其他物体发生碰撞和交互。
ECollisionChannel
: 这是一个枚举类型,定义了不同的碰撞通道(如ECC_WorldStatic
,ECC_Pawn
,ECC_Vehicle
等)。这些通道用于描述不同类型的物体,帮助物理引擎决定如何处理碰撞。- 设置对象类型: 通过调用
SetCollisionObjectType
,你可以指定碰撞组件的对象类型,从而控制它在游戏世界中如何与其他对象发生碰撞
假设你有一个 UCapsuleComponent
,你想将其设置为碰撞通道 ECC_WorldDynamic
,表示它会与动态世界物体发生碰撞。
CapsuleComponent->SetCollisionObjectType(ECC_WorldDynamic);
SetCollisionResponseToChannel
参数说明
-
Channel
(ECollisionChannel
): 指定你要设置响应的碰撞通道。ECollisionChannel
是一个枚举类型,定义了各种碰撞通道(如ECC_WorldStatic
,ECC_Pawn
,ECC_Vehicle
等)。 -
NewResponse
(ECollisionResponse
): 指定新的碰撞响应类型。ECollisionResponse
是一个枚举类型,定义了不同的响应行为,如ECR_Ignore
(忽略)、ECR_Overlap
(重叠)、ECR_Block
(阻挡)等。
碰撞响应类型
ECR_Ignore
: 忽略与该通道的碰撞体的碰撞,不会触发碰撞事件。ECR_Overlap
: 当与该通道的碰撞体发生重叠时触发重叠事件,但不会阻挡物体的移动。ECR_Block
: 阻挡与该通道的碰撞体,物体会在碰撞时停止移动。
示例
假设你有一个 UBoxComponent
,并希望它对 ECC_Pawn
通道的响应设置为 ECR_Overlap
,以便在与玩家角色发生重叠时触发重叠事件:
// 在头文件中声明碰撞组件
UPROPERTY(VisibleAnywhere, Category = "Collision")
UBoxComponent* BoxComponent;
// 在源文件的构造函数中初始化和设置碰撞组件
AMyActor::AMyActor()
{
PrimaryActorTick.bCanEverTick = true;
// 创建并配置碰撞组件
BoxComponent = CreateDefaultSubobject<UBoxComponent>(TEXT("BoxComponent"));
RootComponent = BoxComponent;
// 设置碰撞响应
BoxComponent->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
}
SetCollisionResponseToAllChannels
参数说明
NewResponse
(ECollisionResponse
): 指定新的碰撞响应类型。ECollisionResponse
是一个枚举类型,定义了碰撞体与所有碰撞通道的响应行为,如ECR_Ignore
(忽略)、ECR_Overlap
(重叠)、ECR_Block
(阻挡)等。
碰撞响应类型
ECR_Ignore
: 碰撞体会忽略与所有碰撞通道的碰撞,不会触发任何碰撞事件。ECR_Overlap
: 碰撞体会与所有碰撞通道发生重叠,但不会阻挡物体的移动。ECR_Block
: 碰撞体会阻挡所有碰撞通道中的物体,触发碰撞时会阻挡其移动。
示例
如果你想将一个 USphereComponent
的碰撞响应设置为 ECR_Block
对所有通道,即该碰撞体会阻挡所有碰撞通道中的物体:
// 在头文件中声明碰撞组件
UPROPERTY(VisibleAnywhere, Category = "Collision")
USphereComponent* SphereComponent;
// 在源文件的构造函数中初始化和设置碰撞组件
AMyActor::AMyActor()
{
PrimaryActorTick.bCanEverTick = true;
// 创建并配置碰撞组件
SphereComponent = CreateDefaultSubobject<USphereComponent>(TEXT("SphereComponent"));
RootComponent = SphereComponent;
// 设置对所有通道的碰撞响应
SphereComponent->SetCollisionResponseToAllChannels(ECR_Block);
}
SetCollisionEnabled
参数说明
-
Channel
(ECollisionChannel
): 指定你要设置响应的碰撞通道。ECollisionChannel
是一个枚举类型,定义了各种碰撞通道(如ECC_WorldStatic
,ECC_Pawn
,ECC_Vehicle
等)。 -
NewResponse
(ECollisionResponse
): 指定新的碰撞响应类型。ECollisionResponse
是一个枚举类型,定义了不同的响应行为,如ECR_Ignore
(忽略)、ECR_Overlap
(重叠)、ECR_Block
(阻挡)等。
碰撞响应类型
ECR_Ignore
: 忽略与该通道的碰撞体的碰撞,不会触发碰撞事件。ECR_Overlap
: 当与该通道的碰撞体发生重叠时触发重叠事件,但不会阻挡物体的移动。ECR_Block
: 阻挡与该通道的碰撞体,物体会在碰撞时停止移动。
示例
假设你有一个 UBoxComponent
,并希望它对 ECC_Pawn
通道的响应设置为 ECR_Overlap
,以便在与玩家角色发生重叠时触发重叠事件:
// 在头文件中声明碰撞组件
UPROPERTY(VisibleAnywhere, Category = "Collision")
UBoxComponent* BoxComponent;
// 在源文件的构造函数中初始化和设置碰撞组件
AMyActor::AMyActor()
{
PrimaryActorTick.bCanEverTick = true;
// 创建并配置碰撞组件
BoxComponent = CreateDefaultSubobject<UBoxComponent>(TEXT("BoxComponent"));
RootComponent = BoxComponent;
// 设置碰撞响应
BoxComponent->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
}