Войти
Unreal EngineФорумПрограммирование

[UE4] OnBeginCursorOver (C++) не хочет срабатывать

#0
3:34, 13 фев. 2017

Пилю пазл на си++ без блюпринтов

Есть класс playecontroller где в конструкторе тупо:

{
  DefaultMouseCursor = EMouseCursor::Hand;
  bShowMouseCursor = true;
  bEnableClickEvents = true;
  bEnableMouseOverEvents = true;
}

Есть конструктор гейммода:

{
  DefaultPawnClass = nullptr;

  PlayerControllerClass = AMyPlayerController::StaticClass();

  GameStateClass = AMyGameState::StaticClass();
}

Есть актер, который и должен отлавливать эвент:

UCLASS()
class PROJECT2_API ACellActor : public AActor
{
  GENERATED_BODY()
  
public:  
  // Sets default values for this actor's properties
  ACellActor();

  // Called when the game starts or when spawned
  virtual void BeginPlay() override;
  
  // Called every frame
  virtual void Tick( float DeltaSeconds ) override;

  void SetState(ECellState NewState, const UStaticMesh* NewMesh);

  UFUNCTION()
  void OnMouseHover(AActor* Actor);

  UFUNCTION()
  void OnMouseClick(AActor* Actor, FKey Key);

private:
  ECellState State;
  UStaticMeshComponent* Mesh;
};

.....

ACellActor::ACellActor()
{
   // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
  PrimaryActorTick.bCanEverTick = false;

  RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("Root00"));

  Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh00"));
  Mesh->SetStaticMesh(ConstructorHelpers::FObjectFinderOptional<UStaticMesh>(TEXT("StaticMesh'/Game/empty_smooth.empty_smooth'")).Get());
  Mesh->AttachToComponent(RootComponent, FAttachmentTransformRules(EAttachmentRule::KeepRelative, false));

  OnBeginCursorOver.AddUniqueDynamic(this, &ACellActor::OnMouseHover);
  OnClicked.AddUniqueDynamic(this, &ACellActor::OnMouseClick);
}

void ACellActor::OnMouseHover(AActor* Actor)
{
  GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Magenta, TEXT("Hovering"));
}

void ACellActor::OnMouseClick(AActor* Actor, FKey Key)
{
  GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Magenta, TEXT("Clicked"));
}

и тишина, ни один эвент не работает. Перерыл весь анрил форум по части этого. В чем трабла? Спасибо


#1
4:32, 13 фев. 2017

Надо было при импорте меша поставить галочку для генерирования коллижиона

Unreal EngineФорумПрограммирование

Тема в архиве.

Тема закрыта.