Search code examples
c++unreal-engine4

OnMousePress script don't work in UE4


I want to open the door when pressing left mouse button, but nothing happens

enter image description here

OpenDoor.h

UCLASS()
class HOME_API ADoorOpen : public APawn
{
  GENERATED_BODY()

public:
  ADoorOpen();

protected:
  virtual void BeginPlay() override;

public:  
  virtual void Tick(float DeltaTime) override;

  virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;

  UPROPERTY()
  USceneComponent* Root;

  UPROPERTY(EditAnywhere)
  UStaticMeshComponent* Door;

  UPROPERTY(EditAnywhere, Category = "DoorOpen")
  float rotateValue;

  UPROPERTY(BlueprintReadOnly, Category = "DoorOpen")
  FRotator doorRotation;

  UPROPERTY(BlueprintReadOnly, Category = "DoorOpen")
  bool open;

  UFUNCTION(BlueprintCallable, Category = "DoorOpen")
  void OpenCloseDoor();
};

OpenDoor.cpp

#include "DoorOpen.h"
#include "DrawDebugHelpers.h"
#include "Engine.h"

ADoorOpen::ADoorOpen()
{
  PrimaryActorTick.bCanEverTick = true;

  rotateValue = 0.0f;
  open = false;

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

  Door = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Door"));
  Door->SetRelativeLocation(FVector(0.f, 50.f, -50.f));
  Door->SetupAttachment(RootComponent);
}

void ADoorOpen::OpenCloseDoor()
{
  // don't see this while playing
  GEngine->AddOnScreenDebugMessage(-1, 0.f, FColor::Red, "OpenCloseDoor"); 
  //...
}

void ADoorOpen::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
{
  Super::SetupPlayerInputComponent(PlayerInputComponent);

  // Can't call this
  PlayerInputComponent->BindAction("Fire", IE_Pressed, this, &ADoorOpen::OpenCloseDoor);
}

Solution

  • Increase the display time for AddOnScreenDebugMessage

    GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Red, "OpenCloseDoor"); 
    

    Otherwise, the text will show for just a frame.