UE5学习笔记1-UsrWidget

一、环境说明,UE5.4 + vs2022 + win11

二、UE5.4中内容浏览器找不到C++类文件夹说明

        在ue5中默认不显示C++类的文件夹,可以通过正常添加C++文件使文件夹显示在内容管理其中,点击工具->新建C++类->选择你需要创建的类(当你创建的C++类的父类时空时不会再内容管理器中显示C++类文件夹)->创建该类->编译,回到内容浏览器后可以看到C++类文件夹已经出来了,没看见可以查看是否在设置中将C++类的勾选是否打上对号

三、创建类

        在创建类时选择创建以UserWidget为父类的C++文件,同时可以看见在C++类文件夹中出现一个C++类的图片,图片的名字是创建的类的名字(我将userwidget放在了HUD文件中)

        对C++类单机右键选择创建基于类的蓝图类,将创建的蓝图类放到自己想放的文件夹中

        双击控件蓝图进入蓝图编辑界面在蓝图中放入一个画布画板,在画板中放入一个button,button的名字是buttonclicked,点击上方的编译按钮,点击保存,关闭当前界面

        进入VS项目,可以通过工具->打开VS项目快速进入

在xxx.h文件中代码如下

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "MyUserWidget.generated.h"

/**
 * 
 */
UCLASS()
class UELEARNING_API UMyUserWidget : public UUserWidget
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable)
	void MenuSetUp();

protected:
	virtual bool Initialize() override;
	
public:
	UPROPERTY(meta = (BindWidget))
	class UButton* buttonclicked;


private:
	UFUNCTION()
	void MyTestPrint();

};

其中UFUNCTION(BlueprintCallable)声明了该函数可以在蓝图中可以被执行,UFUNCTION()可以使MyTestPrint()函数被调用去掉宏函数不会被执行

UPROPERTY(meta = (BindWidget))声明了下面的buttonclicked和界面中的按钮绑定,按钮的名字和变量的名字保持一样

xxx.cpp代码如下

// Fill out your copyright notice in the Description page of Project Settings.


#include "MyUserWidget.h"
#include "Components/Button.h"

void UMyUserWidget::MenuSetUp()
{
	AddToViewport();/* 将小部件添加到视口 */
	SetVisibility(ESlateVisibility::Visible);/* 设置可见性 */
	bIsFocusable = true;/* 设置聚焦模式 */

	UWorld* World = GetWorld();
	if (World)
	{
		APlayerController* PlayerController = World->GetFirstPlayerController();
		if (PlayerController)
		{
			FInputModeUIOnly InputModeData;
			InputModeData.SetWidgetToFocus(TakeWidget());/* 设置只关注与小部件 */
			InputModeData.SetLockMouseToViewportBehavior(EMouseLockMode::DoNotLock);/* 设置鼠标光标锁定 */
			PlayerController->SetInputMode(InputModeData);//设置模式集中于界面
			PlayerController->SetShowMouseCursor(true);/* 看到光标 */
		}
	}
}


bool UMyUserWidget::Initialize()
{
	if (!Super::Initialize())
	{
		return false;
	}

	if (buttonclicked)
	{
		buttonclicked->OnClicked.AddDynamic(this, &UMyUserWidget::MyTestPrint);//绑定回调函数
	}

	return true;
}

void UMyUserWidget::MyTestPrint()
{
	GEngine->AddOnScreenDebugMessage(
		-1,
		15.f,
		FColor::Yellow,
		FString::Printf(TEXT("this is my button clickedfunction"))
	);
}

最后打开管卡蓝图

在 event beginplay中通过箭头调用函数createwidget,在class中选择创建的界面蓝图的名字,再通过箭头调用类中的menusetup函数,点击编译,保存。

最终效果 在点击clicked按钮后界面左上角会出现打印的话

 

<think>好的,用户想了解或解决与UE5 Widget Renderer相关的问题,特别是实现和故障排除方面。首先,我需要回忆UE5中Widget系统的相关知识,以及常见的渲染问题。 首先,UE5的Widget系统主要用于创建UI界面,通过UMG(Unreal Motion Graphics)设计器来构建。Widget Renderer负责将这些UI元素渲染到屏幕上,无论是2D HUD还是3D世界中的UI组件。用户可能在实现过程中遇到渲染不显示、性能问题或者平台兼容性问题。 接下来,我需要考虑UE5中Widget Renderer的实现步骤。可能需要包括创建Widget组件、设置材质和渲染目标等。同时,要确保引用的信息正确,比如站内提到的UE4 Vulkan渲染器的修复,这可能对Android平台的问题有帮助[^1]。另外,对象库的Bug修复[^2]也可能影响Widget的引用,需要检查是否正确存储了生成的蓝图对象。 对于故障排除,常见的问题比如Widget不显示,可能涉及渲染目标的设置是否正确,或者是否在正确的层级上添加了Widget。性能问题可能需要优化材质和减少重绘区域。此外,不同平台的渲染差异,比如Vulkan在Android上的表现,需要确保引擎版本已包含相关修复。 用户可能需要具体的步骤来解决他们的问题,比如如何将Widget渲染到3D物体上,或者如何处理输入事件。同时,生成相关问题时,要涵盖实现方法、常见错误、性能优化、平台差异和输入交互等方面,帮助用户全面了解可能遇到的挑战和解决方案。 最后,确保回答符合格式要求,使用正确的中文表述,行内公式用$...$,独立公式用$$...$$,并自然添加引用标识。同时结构清晰,分点说明实现步骤和故障排除方法,引用相关修复案例来增强可信度。</think>### Unreal Engine 5 Widget Renderer实现与故障排除 #### 1. Widget Renderer基础实现 在UE5中,Widget Renderer主要用于将UMG界面渲染到材质或3D对象上,例如屏幕空间HUD或世界空间中的显示屏。实现步骤如下: 1. **创建Widget组件**:在蓝图中添加`Widget Component`,并绑定UMG界面。 2. **设置渲染目标**:通过`Render Target`将Widget输出到纹理,例如: ```cpp UWidgetComponent* WidgetComp = CreateDefaultSubobject<UWidgetComponent>(TEXT("WidgetRenderer")); WidgetComp->SetDrawAtDesiredSize(true); WidgetComp->SetWidgetClass(MyWidgetClass); ``` 3. **材质绑定**:将渲染目标纹理应用到3D物体的材质中,实现UI在场景中的显示。 #### 2. 常见问题与解决方案 - **问题1:Widget不显示** - 检查`Widget Component`的`Visibility`属性是否启用。 - 确认UMG界面的`Render Opacity`未设置为0。 - 确保渲染目标的分辨率与Widget尺寸匹配[^1]。 - **问题2:性能卡顿** - 限制Widget的更新频率,避免每帧刷新。 - 使用`Invalidate Layout and Volatility`优化UMG逻辑。 - 参考UE4 Vulkan渲染器的优化方法,例如减少动态纹理生成。 - **问题3:输入事件无响应** - 确认`Widget Component`的`Receive Hardware Input`选项已启用。 - 检查UMG界面中的`Is Focusable`属性是否开启。 #### 3. 高级功能与优化 - **动态分辨率适配**:通过`GetViewportSize`动态调整Widget尺寸。 - **材质参数控制**:将Widget渲染结果与材质参数结合,实现动态效果,例如: $$ \text{FinalColor} = \text{WidgetTexture} \times \text{EmissiveStrength} $$ - **多平台兼容性**:针对Android设备需注意Vulkan渲染器的已知问题修复[^1],避免纹理格式不兼容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值