Your function does not make sense. It looks like a chatGPT slop.
You need to pass your renderer target as a pointer.
Your PlayerImage also should be a pointer.
There is no System::IsValid function just IsValid
header
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "MyUserWidget.generated.h"
class UImage;
/**
*
*/
UCLASS()
class YOUR_API UMyUserWidget : public UUserWidget
{
GENERATED_BODY()
UPROPERTY(meta = (BindWidget))
UImage* PlayerImage;
UFUNCTION(BlueprintCallable)
void SetImageFromRenderTarget(UTextureRenderTarget2D* RenderTarget);
UFUNCTION()
void SafeApplyFallback();
};
.cpp
#include "MyUserWidget.h"
#include "Engine/TextureRenderTarget2D.h"
#include "Components/Image.h"
#include "Materials/MaterialInstanceDynamic.h"
void UMyUserWidget::SafeApplyFallback()
{
// do fallback;
}
void UMyUserWidget::SetImageFromRenderTarget(UTextureRenderTarget2D* RenderTarget)
{
if (PlayerImage == nullptr || !IsValid(PlayerImage)) return;
UMaterialInstanceDynamic* Mat = PlayerImage->GetDynamicMaterial();
if (Mat == nullptr || !IsValid(Mat)) return;
if (RenderTarget == nullptr || !IsValid(RenderTarget))
{
SafeApplyFallback(); return;
}
Mat->SetTextureParameterValue("PlayerImageTex", RenderTarget);
}