Нажатие на актера, который не запускает UE4 - PullRequest
0 голосов
/ 28 мая 2020

У меня есть проблема, которую, думаю, очень легко решить, но я пытался решить, но потерпел неудачу.

Image From Game Проблема в том, что у меня 2500 актеров в мире (2d спрайты) я пытаюсь заставить актера слушать события щелчка четырьмя способами, но все не удалось

1-й способ

    OnClicked.AddUniqueDynamic(this, &AWorldUnitSprite::OnSelected);

2-й способ

void AWorldUnitSprite::NotifyActorOnClicked(FKey ButtonPressed)
{
    Super::NotifyActorOnClicked(ButtonPressed);
    UE_LOG(LogTemp, Warning, TEXT("Am here 15"));

}

3-й способ


void AElkaisarController::SetupInputComponent()
{
    Super::SetupInputComponent();
    check(InputComponent);
    InputComponent->BindAction("MouseClick", IE_Pressed, this, &AElkaisarController::OnMouseClick);
}

void AElkaisarController::OnMouseClick()
{
    FHitResult HitResult;
    GetHitResultUnderCursor(ECollisionChannel::ECC_Pawn, false, HitResult);

    if (HitResult.GetComponent())
    {
        GEngine->AddOnScreenDebugMessage(-1, 2, FColor::Red,    FString::Printf(TEXT("Mouse Click+++ Component: %s"), *HitResult.GetComponent()->GetName()));
    }

    if (HitResult.GetActor())
    {
        GEngine->AddOnScreenDebugMessage(-1, 2, FColor::Red, FString::Printf(TEXT("Mouse Click+++ Actor: %s"), *HitResult.GetActor()->GetName()));
   }

}

Все три способа не запускали события щелчка. Мой класс контроллера включает события щелчка. Код:

AElkaisarController::AElkaisarController()
{
    bEnableClickEvents = true;
    bEnableTouchEvents = true;
    bShowMouseCursor = true;
    bEnableMouseOverEvents = true;
    bEnableTouchOverEvents = true;


}

, а конструктор My Actor - это код:

AWorldUnitSprite::AWorldUnitSprite(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
    // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it.
    PrimaryActorTick.bCanEverTick = true;

//Create a default UPaperSpriteComponent and register it to this Actor
    Sprite = ObjectInitializer.CreateDefaultSubobject<UPaperSpriteComponent>(this, TEXT("SpriteComp"));
    RootComponent = Sprite;
    ObjectInitializer.CreateDefaultSubobject<APawn>(this, TEXT("MovementComp"));
    bBlockInput = false;
    EnableInput(UGameplayStatics::GetPlayerController(GetWorld(), 0));

}

Я искал решение, но не нашел ничего, что мне помогло, спасибо за вашу помощь

...