虚幻学习笔记15—C++和UI(一)

一、前言

        在C++可以直接创建按钮、滚轮等UI,并且可以直接绑定并处理响应事件。在创建C++代码后还是需要通过蓝图来显示到应用中,总体来说还是不如直接用蓝图来的方便。

        本文使用的虚幻引擎为5.2.1。

二、实现

2.1、创建UUserWidgetl类型的C++类

        声明两个按钮并创建两个按钮的点击事件处理方法,头文件代码如下,这里只是声明了两个按钮并没有实际创建按钮,需要在后续的蓝图UI中进行绑定。

#pragma once

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

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

public:

	//这里设定的“buttonStart"按钮名称后面创建蓝图类UI中按钮的名称和这个一样
	UPROPERTY(meta = (BindWidget))
	UButton* ButtonStart;
	UPROPERTY(meta = (BindWidget))
	UButton* ButtonQuit;

public:

	virtual bool Initialize()override;

public:

	UFUNCTION()
	void BtnClick_Start();
	UFUNCTION()
	void BtnClick_Quit();
};

注:在代码里声明两个按钮,其必须在后续的蓝图类中体现,包括名字也要一样,否则会编译错误,甚至编辑器直接崩。

在初始化函数里将按钮的点击进行绑定,同时编写按钮点击事件处理函数的信息,代码如下:

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

	ButtonStart->OnClicked.AddDynamic(this, &UMyUserWidget::BtnClick_Start);
	ButtonQuit->OnClicked.AddDynamic(this, &UMyUserWidget::BtnClick_Quit);

	return true;
}

void UMyUserWidget::BtnClick_Start()
{
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, TEXT("Button Start"));
}

void UMyUserWidget::BtnClick_Quit()
{
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("Button Quit"));
}

2.2、创建UI蓝图

        这一步和之前直接创建C++的蓝图类不同,如图2.2.1所示,如果点击创建该类的蓝图类的话只会创建了一个蓝图类,它并没有真正的UI元素。

图2.2.1

我们需要的是单独创建一个控件蓝图,然后在其父类设置时选择2.1创建的类。

        在选择父类时需要先创建2.1中生命的两个类,并且一定要名称一致,如图2.2.2所示,按钮或其他控件可以创建多个,但是这两个类型必须有而且名字必须一样,否则在绑定父类时直接导致编

图2.2.2

辑器崩溃,如图2.2.3所示为没有”ButtonStart“按钮的情况下设置父类后直接导致编辑器崩溃

图2.2.3

崩的信息也是提示C++代码中没有这个按钮,然后进行了绑定。当再次打开编辑器的并尝试打开蓝图的情况下,会提示无法打开,或者打开后蓝图的父类回复默认的”用户控件”。并且再在父类中选择时已经找不到之前2.1创建的类了,同时C++类文件中也没有这个类了。需要重新编译C++代码才会再出现

2.3、添加到场景中

        这一步和在蓝图中创建UI并添加到视口的逻辑是一样的,需要在PlayController或者其他的系统管理类中创建2.2中创建的蓝图类,并添加到视口,代码如下,创建的TEXT路径即为2.2中蓝图

#include "Blueprint/UserWidget.h"//需要添加的头文件

void AMyPlayerController1::BeginPlay()
{
	Super::BeginPlay();
	//这里的参数NULL和表示只是加载到场景中,不会加载到这个类下面
	UClass* WidgetCalss = LoadClass<UUserWidget>(NULL, TEXT("/Script/UMGEditor.WidgetBlueprint'/Game/BluePrint/UMG_Widget.UMG_Widget_C'"));
	UUserWidget* MyWidgetClass = nullptr;
	MyWidgetClass = CreateWidget<UUserWidget>(GetWorld(), WidgetCalss);
	MyWidgetClass->AddToViewport();

}

类的“复制引用”后的路径,同时需要再后面添加“_C”的后缀。

三、总结

3.1、创建C++的按钮变量名称一定要在后续蓝图控件中创建,类型和名称都要一致,否则会编译报错,甚至编辑器崩。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/246854.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

做为一个产品经理带你详细了解--动态面板的使用

&#x1f4da;&#x1f4da; &#x1f3c5;我是bing人&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Axure》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一…

ZeroSSL-ip证书配置

1.申请证书 Free SSL Certificates and SSL Tools - ZeroSSL 2.填入公网 IP 地址 3.选择90天免费 SSL 4.自动生成CSR 5.选择文件验证方式 使用80端口,建立对应的文件并进行访问测试 6. 进行认证 7.下载证书并进行配置 8.合并ssl证书 对于 Nginx 服务器,需要将 ca_bundle.crt…

跨文化编程:TikTok上如何通过视频传达独特的文化观点?

随着数字时代的来临&#xff0c;社交媒体成为了连接全球文化的纽带&#xff0c;而TikTok作为其中一员&#xff0c;通过独特的短视频形式&#xff0c;成为了传递跨文化观点的平台。本文将深入研究在TikTok上如何进行跨文化编程&#xff0c;以视频为媒介传达各种独特而生动的文化…

phpy 连接 PHP与Python生态 跨界合作 PHPY搭建 已解决

目录 需求介绍 安装 windows版本 文件地址 运行效果 需求介绍 在日常功能开发中&#xff0c;难免会使用python的计算库&#xff0c;同时自己要是一名PHP开发工程师。就在最近有相应的需求&#xff0c;索性使用phpy来进行功能开发 安装 windows版本 phpy 是识沃团队最新推出…

【每日一题】【12.15】2415.反转二叉树的奇数层

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 2415. 反转二叉树的奇数层https://leetcode.cn/problems/reverse-odd-levels-of-binary-tree/ 今天终于碰到了一个mid题目&#x…

电脑录制高清视频文件是怎么设置的

在当今数字化的时代&#xff0c;电脑已经成为我们生活中不可或缺的工具。除了处理文档、浏览网页等常见功能外&#xff0c;它还可以轻松录制高清视频文件。那么&#xff0c;具体如何设置电脑才可以录制高清视频呢&#xff1f; 首先&#xff0c;要确保电脑的硬件配置是否能够支…

搭建个人智能家居 开篇(搭建Home Assistant)

搭建个人智能家居 开篇&#xff08;搭建Home Assistant&#xff09; 前言Home Assistant搭建Home AssistantUbuntu系统搭建Windows系统搭建VM安装方法VirtualBox安装方法&#xff1a; 配置Home Assistant控制页面 前言 随着科技的进步、发展&#xff0c;物联网给我们的生活带来…

使用 ClassFinal 对 java class 文件进行加密防止反编译

ClassFinal 是一款 java class文件安全加密工具&#xff0c;支持直接加密 jar 包或 war 包&#xff0c;无需修改任何项目代码&#xff0c;兼容 spring-framework&#xff1b;可避免源码泄漏或字节码被反编译 特点 无需修改原项目代码&#xff0c;只要把编译好的jar/war包用本工…

【C语言】二分查找(详解)

&#x1f3a5; 岁月失语唯石能言的个人主页 &#x1f525;个人栏专&#xff1a;秒懂C语言 ⭐若在许我少年时&#xff0c;一两黄金一两风 一、二分查找的思路 二分查找是一种高效的查找算法&#xff0c;尤其适用于有序数组。它的基本思想是通过将查找区间逐步缩小…

Windows更改远程桌面端口并添加防火墙入站规则

1.运行 快捷键winR组合键&#xff0c;win就是键盘上的windows系统图标键。 2.打开注册表 Regedit&#xff0c;在对话框中输入regedit命令&#xff0c;然后回车 3.打开注册表&#xff0c;输入命令后&#xff0c;会打开系统的注册表&#xff0c;左边是目录栏&#xff0c;右边是…

什么是MVCC?看看它的实现原理

大家好&#xff0c;我是归思君~ 之前在讲 MySQL 事务隔离性提到过&#xff0c;对于写操作给读操作的影响这种情形下发生的脏读、不可重复读、虚读问题&#xff0c;是通过MVCC 机制来进行解决的&#xff0c;那么MVCC到底是如何实现的&#xff0c;其内部原理是怎样的呢&#xff1…

Idea执行bat使用maven打包springboot项目成docker镜像并push到Harbor

如果执行以下命令失败&#xff0c;先把mvn的-q参数去掉&#xff0c;让错误输出到控制台。 《idea配置优化、Maven配置镜像、并行构建加速打包、解决maven打包时偶尔几个文件没权限的问题》下面的使用company-repo私有仓库和阿里云镜像仓库同时使用的配置参考。 bat echo off …

四六级高频词组10

目录 词组 其他链接 词组 401. instead of &#xff08;in place of&#xff09; 代替&#xff0c;而不是… 402. instruct…in &#xff08;teach&#xff09; 教。指导。训练某人… 403. insure…for 把…保险&#xff08;多少钱&#xff09;&#xff1b; ensure 使安全…

状态码及常用注解

状态码 1.200 请求成功 2.404 请求资源不存在 检查请求路径 3.400 表示请求参数不合法(页面上参数的key和controller方法参数名字不一致、传的参数数量不对应) 4.405 表示请求方式与接收方式不匹配 5.500 程序报错检查java代码和控制台日志 6.403 表示没有权限访问 MVC常…

web网络安全

web安全 一&#xff0c;xss 跨站脚本攻击(全称Cross Site Scripting,为和CSS&#xff08;层叠样式表&#xff09;区分&#xff0c;简称为XSS)是指恶意攻击者在Web页面中插入恶意javascript代码&#xff08;也可能包含html代码&#xff09;&#xff0c;当用户浏览网页之时&…

国际语音通知系统有哪些应用场景?

国际语音通知系统操作简单、安全性高、实用性强&#xff0c;可广泛应用于国际航空、国际银行、出海游戏、跨国旅游、跨国金融等行业。 1.会议通知 企业人事管理人员使用语音通知的方式&#xff0c;快速通知参会人员。 2.订单通知 企业通过语音通知向客户发送订单确认通知&a…

RCE漏洞基础及CTF绕过

1.漏洞成因 可以对系统命令执行函数和调用代码函数传递的值进行控制。 2.系统执行命令函数 system() exec() exec会执行系统命令&#xff0c;保存回显最后一行而且单exec不输出结果 shell_exec() 不会输出结果&#xff0c;保存所有回显 passthru() 和system一样 popen() …

STM32F407-14.3.2-03 中心对齐模式

中心对齐模式&#xff08;递增/递减计数&#xff09; 在中心对齐模式下&#xff0c;计数器从 0 开始计数到自动重载值&#xff08;TIMx_ARR 寄存器的内容&#xff09;— 1&#xff0c;生成计数器上溢事件&#xff1b;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之…

LLM(七)| Mamba:LLM新架构的浅探

目前大型语言模型&#xff08;LLM&#xff09;领域发展如火如荼&#xff0c;本文将重点探索在单个消费级GPU上可以有效运行的小型模型&#xff08;≤7B个参数&#xff09;。 我们将从以下几个方面重点介绍基于新架构的语言模型&#xff1a;&#x1f40d;Mamba模型&#xff08;h…

HTTP 302错误:临时重定向

在Web开发中&#xff0c;HTTP状态码是用于表示Web服务器响应的各种状态。其中&#xff0c;HTTP 302错误表示临时重定向&#xff0c;这意味着请求的资源已被临时移动到其他位置&#xff0c;并且服务器已经提供了新的URL&#xff0c;以便客户端可以重新发送请求。 了解HTTP 302错…