2016-09-10 5 views
1

私はキャラクターに従うように設定されたATriggerSphereを持っており、他のアクターとのオーバーラップに反応することを意図しています。私はそうのようにこれを実行しようとしています:TriggerSphereと他の俳優とのオーバーラップの処理?

void AScrollsCharacter::BeginPlay() 
{ 
    // Call the base class 
    Super::BeginPlay(); 

    //Create activate trigger radius 
    activateRadiusTrigger = GetWorld()->SpawnActor<ATriggerSphere>(ATriggerSphere::StaticClass(),GetActorLocation(), GetActorRotation()); 
    activateRadiusTrigger->SetActorHiddenInGame(false); 
    USphereComponent* colSphere = (USphereComponent*) activateRadiusTrigger->GetCollisionComponent(); 
    colSphere->SetSphereRadius(ACTIVATE_RADIUS); 
    colSphere->bGenerateOverlapEvents = true; 
    colSphere->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Overlap); 
    colSphere->OnComponentBeginOverlap.AddDynamic(this, &AScrollsCharacter::OnOverlapActivateSphere); 

} 

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.")); 
} 

void AScrollsCharacter::Tick(float deltaSeconds) 
{ 
    Super::Tick(deltaSeconds); 

    //Set the radius trigger to follow the player 
    activateRadiusTrigger->SetActorLocation(GetActorLocation()); 
} 

OnOverlapActivateSphereはいえ、衝突で呼び出さ取得していないようです。キャラクターはこの球の中にあり、トリガーにまだそれを無視するように指示していないので、メッセージがすべての目盛りを印刷すると期待します。私は何かを誤解しているか、見失っていますか?ありがとう!

答えて

1

回答

いいえ、すべてのダニと呼ばれることはないだろう。 OnOverlapActivateSphereは、が重複している場合にのみ、1回だけ呼び出されます。だから、再び呼び出されるためには、オブジェクトを球の外に移動させ、次にそれを再び内側に移動させる必要があります。あなたがキャラクターの位置にトリックをトリガしているという事実は、あなたのプレイヤーがそれを抜け出すことを意味しません。

それはさえ呼ばれていない場合

チェックアウトEpic Gamesの(UE4のクリエイター)によって提供さcollision overview一回。だから、:

  1. あなたは重複他に設定され、オブジェクトの少なくとも一つを持っていることを確認してください。
  2. 球のために重複イベントを生成することを確認してください(ただし、コード内でtrueに設定されているので、問題はありません)。

提案

あなたがトリガする別の俳優を必要としないように見えます。とにかくあなたのキャラクターに付けられています。代わりにそれをコンポーネントにすることをお勧めします。 USphereComponentから継承し、トリガロジックを実装し、このコンポーネントを文字のサブオブジェクトにして、BeginPlayではなくコンストラクタのルートコンポーネントにアタッチすることができます。

+0

お返事ありがとうございます。私はステップ1と2からあなたのアドバイスを受け取り、それを反映するために上記のコードを少し修正しました。悲しいことに、俳優**が互いに重なり合うように**私の問題を解決することはできませんでした。重複イベントは登録されません。 – nathan

+0

@nathanプレイ中にコンソールコマンド "Show Collision"を試して、トリガー球が期待どおりの位置にあることを確認しましたか? –

+0

はい、あります。球は画面上に描画され、他のアクターと物理的に重なり合っています。 – nathan

関連する問題