2016-09-15 34 views
5

我似乎誤解了如何在我的組件上實現重疊事件。我創建了一個USphereComponent來跟蹤我的角色。它旨在激發其他演員附近有不到玩家的範圍重疊的事件:USphereComponent and Overlap Events

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。

有人能幫我理解我在這個設置中缺少的東西嗎?

編輯:在編輯器中,球體組件的調試邊界顏色爲橙色,但在遊戲運行時變爲紅色。這種顏色變化是否有意義?

回答

0

確保其他參與者也啓用了衝突,並確保他們實際上有碰撞組件。例如,如果其他參與者具有骨架網格組件,則該網格需要具有物理資源,否則將不會有任何碰撞! 您還可以爲其他演員添加一個碰撞球體/盒子/膠囊,並確保已啓用碰撞!

+0

他們是,他們這樣做。我在帖子中表示,所有參與者都將「生成重疊事件」標誌設置爲true,這意味着它們都具有碰撞組件。 – nathan

1

如果你還在試圖解決這一問題,也許嘗試使用

activateRadius->SetSphereRadius(ACTIVATE_RADIUS); 

,而不是

activateRadius->InitSphereRadius(ACTIVATE_RADIUS); 

根據該文檔,您使用的功能,InitSphereRadius

設置球體半徑而不觸發渲染或物理更新。

我很確定你想要物理更新。

+0

感謝您的迴應!不幸的是,這似乎沒有改變任何東西。我認爲SetSphereRadius會觸發強制渲染更新,但如果沒有強制更新,無論如何都會發生每個滴答。 – nathan