我似乎误解了如何在我的组件上实现重叠事件。我创建了一个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。
有人能帮我弄清楚我在这个设置中错过了什么吗?
注意:球体组件的调试边界在编辑器中是橙子的,但是在游戏运行时变成红色。这个颜色变化有意义吗?
3条答案
按热度按时间5gfr0r5j1#
确保其他参与者也启用了碰撞,并确保他们实际上有碰撞组件。例如,如果其他参与者有 backbone 网格组件,该网格需要有物理资源,否则它将没有任何碰撞!您也可以添加一个碰撞球体/长方体/胶囊到您的其他参与者,并确保碰撞启用!
yks3o0rb2#
如果您仍在尝试解决此问题,可以尝试使用
代替
根据文档,您正在使用的函数
InitSphereRadius
:设置球体半径,而不触发渲染或物理更新。
我很确定你想知道物理学的最新进展。
thigvfpy3#
您正在构造函数中绑定委托方法。
我认为要使绑定生效,应该在
::BeginPlay
方法内部完成。