У меня есть проблема, которую, думаю, очень легко решить, но я пытался решить, но потерпел неудачу.
Проблема в том, что у меня 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));
}
Я искал решение, но не нашел ничего, что мне помогло, спасибо за вашу помощь