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按钮后界面左上角会出现打印的话

 

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值