UnrealHeaderTool, one that reads those UFUNCTION, UPROPERTY macros and generate code according to it to automatize lot of things, in case of BlueprintNativeEvent needs to define (create code for function) direcly for that function in order to make it blueprints (when you call that event in C++ it needs to trigger this event in blueprints, without that extra code event would be dead in BP), making it impossible to you to write that code as function already exists in generated code, that why UHT genernate decleration of “_Implementation” function which you can override in C++ and add extra code for the event without breaking blueprint event. That what it is when you see “_Implementation”
But this case is special, and all you need to look at is engine code to see what this is all about, you would be also informed on compilation if you would use OnDragOver_Implementation
UFUNCTION(BlueprintImplementableEvent, BlueprintCosmetic, Category="Drag and Drop")
bool OnDragOver(FGeometry MyGeometry, FPointerEvent PointerEvent, UDragDropOperation* Operation);
DEPRECATED(4.8, "Use NativeOnDragOver")
virtual bool OnDragOver_Implementation(FGeometry MyGeometry, FPointerEvent PointerEvent, UDragDropOperation* Operation);
UFUNCTION(BlueprintImplementableEvent, BlueprintCosmetic, Category="Drag and Drop")
bool OnDrop(FGeometry MyGeometry, FPointerEvent PointerEvent, UDragDropOperation* Operation);
DEPRECATED(4.8, "Use NativeOnDrop")
virtual bool OnDrop_Implementation(FGeometry MyGeometry, FPointerEvent PointerEvent, UDragDropOperation* Operation);
And C++ code of those NAtive functions simply calls blueprint events:
bool UUserWidget::NativeOnDragOver( const FGeometry& InGeometry, const FDragDropEvent& InDragDropEvent, UDragDropOperation* InOperation )
{
return OnDragOver( InGeometry, InDragDropEvent, InOperation );
}
bool UUserWidget::NativeOnDrop( const FGeometry& InGeometry, const FDragDropEvent& InDragDropEvent, UDragDropOperation* InOperation )
{
return OnDrop( InGeometry, InDragDropEvent, InOperation );
}
So you should override NativeOnDrop and remember to call Super::NativeOnDrop or OnDrop direclly as those functions does in it or else blueprint won’t execute those events, this is also moment when they be executed so wht before this call will before blueprint event do there thing and after will be after those events and all changes they made will be in action.