c++ USphereComponent和重叠事件

wnrlj8wa  于 2023-01-15  发布在  其他
关注(0)|答案(3)|浏览(164)

我似乎误解了如何在我的组件上实现重叠事件。我创建了一个USphereComponent来跟随我的角色。它被设计为在玩家可及范围内的其他附近角色上触发重叠事件:

AScrollsCharacter::AScrollsCharacter()
{
    ...Redacted irellevant code...

    //Create activate trigger radius
    USphereComponent* activateRadius = CreateDefaultSubobject<USphereComponent>(TEXT("Activate Radius"));
    activateRadius->InitSphereRadius(ACTIVATE_RADIUS);
    activateRadius->bGenerateOverlapEvents = true;
    activateRadius->SetupAttachment(RootComponent);
    activateRadius->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Overlap);
    activateRadius->OnComponentBeginOverlap.AddDynamic(this, &AScrollsCharacter::OnOverlapActivateSphere);
    activateRadius->bHiddenInGame = false;
}

void AScrollsCharacter::OnOverlapActivateSphere(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
    GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("We got a collision."));
}

球体组件正确连接,半径以正确的大小绘制在屏幕上。但是,当我将半径移向游戏中的其他角色并使他们重叠时,事件似乎没有启动。
所有涉及的执行元都将“生成重叠事件”标志设置为true。
有人能帮我弄清楚我在这个设置中错过了什么吗?
注意:球体组件的调试边界在编辑器中是橙子的,但是在游戏运行时变成红色。这个颜色变化有意义吗?

5gfr0r5j

5gfr0r5j1#

确保其他参与者也启用了碰撞,并确保他们实际上有碰撞组件。例如,如果其他参与者有 backbone 网格组件,该网格需要有物理资源,否则它将没有任何碰撞!您也可以添加一个碰撞球体/长方体/胶囊到您的其他参与者,并确保碰撞启用!

yks3o0rb

yks3o0rb2#

如果您仍在尝试解决此问题,可以尝试使用

activateRadius->SetSphereRadius(ACTIVATE_RADIUS);

代替

activateRadius->InitSphereRadius(ACTIVATE_RADIUS);

根据文档,您正在使用的函数InitSphereRadius
设置球体半径,而不触发渲染或物理更新。
我很确定你想知道物理学的最新进展。

thigvfpy

thigvfpy3#

您正在构造函数中绑定委托方法。
我认为要使绑定生效,应该在::BeginPlay方法内部完成。

相关问题