私はキャラクターに従うように設定された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と2からあなたのアドバイスを受け取り、それを反映するために上記のコードを少し修正しました。悲しいことに、俳優**が互いに重なり合うように**私の問題を解決することはできませんでした。重複イベントは登録されません。 – nathan
@nathanプレイ中にコンソールコマンド "Show Collision"を試して、トリガー球が期待どおりの位置にあることを確認しましたか? –
はい、あります。球は画面上に描画され、他のアクターと物理的に重なり合っています。 – nathan