How to get mouse input through NativeOnKeyDown function on widget

Hello
I’m making interactive widget.

I can get keyboard inputs with NativeOnKeyDown but I can’t get mouse input.

FReply UBuildingHelper::NativeOnKeyDown(const FGeometry& InGeometry, const FKeyEvent& InKeyEvent)
{
	Super::NativeOnKeyDown(InGeometry, InKeyEvent);

	if(InKeyEvent.GetKey() == EKeys::LeftMouseButton)
	{
		UE_LOG(LogTemp, Warning, TEXT("LeftMouseButton"));
	}
	else if(InKeyEvent.GetKey() == EKeys::A)
	{
		UE_LOG(LogTemp, Warning, TEXT("Keyboard A Pressed"));
	}
	else if(InKeyEvent.GetKey() == EKeys::E)
	{
		UE_LOG(LogTemp, Warning, TEXT("EKey!!!!"));
	}

	return FReply::Handled();
}

image

As I wrote, I can see the logs about keyboard like a and e.
but I can’t get left mouse input and right mouse input.

what did i wrong?

thanks in advance :slight_smile:

You need to hand it via the native mouse commands (not keyboard)

header needs include “Input/Reply.h” and override the following functions from uuserwidget

	virtual FReply NativeOnKeyDown(const FGeometry& InGeometry, const FKeyEvent& InKeyEvent) override;

	virtual FReply NativeOnMouseButtonDown(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
	
	virtual FReply NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
	
	virtual FReply NativeOnMouseMove(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
};

cpp



#include "BuildingHelper.h"

FReply UBuildingHelper::NativeOnKeyDown(const FGeometry& InGeometry, const FKeyEvent& InKeyEvent)
{
	Super::NativeOnKeyDown(InGeometry, InKeyEvent);

	
	if (InKeyEvent.GetKey() == EKeys::A)
	{
		UE_LOG(LogTemp, Warning, TEXT("Keyboard A Pressed"));
	}
	else if (InKeyEvent.GetKey() == EKeys::E)
	{
		UE_LOG(LogTemp, Warning, TEXT("EKey!!!!"));
	}

	return FReply::Handled();
}


FReply UBuildingHelper::NativeOnMouseButtonDown(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent)
{
	Super::NativeOnMouseButtonDown(InGeometry, InMouseEvent);
	
	if (InMouseEvent.GetEffectingButton() == EKeys::LeftMouseButton)
	{
		UE_LOG(LogTemp, Warning, TEXT("LeftMouseButton down"));
	}
	return FReply::Handled();
}



FReply UBuildingHelper::NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) 
{
	Super::NativeOnMouseButtonUp(InGeometry, InMouseEvent);
	if (InMouseEvent.GetEffectingButton() == EKeys::LeftMouseButton)
	{
		UE_LOG(LogTemp, Warning, TEXT("LeftMouseButton up"));
	}
	return FReply::Handled();
}

FReply UBuildingHelper::NativeOnMouseMove(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent)
{
	Super::NativeOnMouseMove(InGeometry, InMouseEvent);

	UE_LOG(LogTemp, Warning, TEXT("MouseButton move"));
	return FReply::Handled();
}

Always look at the engine files for tips :wink: Which functions are virtual and can be overriden.

1 Like

Oh!! Thank you so much :slight_smile:
I hope you have a wonderful day!!