Texture not valid! UE-23902!

private void SetImageFromRenderTarget(UTextureRenderTarget2D RenderTarget)
{
if (PlayerImage == nullptr || !System::IsValid(PlayerImage)) return;
auto Mat = PlayerImage.GetDynamicMaterial();
if (Mat == nullptr || !System::IsValid(Mat)) return;

if (RenderTarget == nullptr || !System::IsValid(RenderTarget))
{ SafeApplyFallback(); return; }

Mat.SetTextureParameterValue(n"PlayerImageTex", RenderTarget);

}我的RT是资产为什么会无效?

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);

}

Add in “UMG” Module to the build file

Material

Widget

In game

Thank you for your reply. I’m using AngelScript, and the issue I’m encountering is that when switching graphics quality settings, a uniform buffer update occurs. During the update, it detects that my RenderTarget is invalid, and I suspect that the RenderTarget has been garbage collected (GC’d).