`
aigo
  • 浏览: 2674805 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

[UE4]UMG widget构造初始化函数中获取其内部组件

阅读更多

原文作者:@玄冬Wong

目的:在自定义的Widget初始化完毕后,获取其内部的button、combo等UMG组件的C++指针。

 

这里我们新建了一个C++类,LoginWidget,继承自UserWidget,然后新建了一个Widget蓝图LoginWidgetBP,继承自LoginWidget C++ class。我们想在这个LoginWidgetBP蓝图被实例化之后,获取这个UI蓝图内的各个UI组件。

 

UserWidget 有两个函数可以做初始化,一个是 bool Initialize();  一个是 void NativeConstruct(); 

 

第一种方式:Initialize()函数中初始化。

LoginWidget.h

bool Initialize() override;
UComboBoxString* ComboServer;
UEditableTextBox* TxtBoxAccount;
UEditableTextBox* TxtBoxPwd;

 

 

假设我自己的Widget叫LoginWidget,继承自:UserWidget。

ULoginWidget::ULoginWidget(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
	ComboServer = NULL;
	TxtBoxAccount = NULL;
	TxtBoxPwd = NULL;
}

bool ULoginWidget::Initialize()
{
	if (!Super::Initialize())
	{
		return false;
	}
	
	if (UComboBoxString* combo = Cast<UComboBoxString>(GetWidgetFromName("ComboServer")))
	{
		ComboServer = combo;
	}
	if (UEditableTextBox* txtbox = Cast<UEditableTextBox>(GetWidgetFromName("TxtBoxAccount")))
	{
		TxtBoxAccount = txtbox;
		TxtBoxAccount->SetKeyboardFocus();
	}
	if (UEditableTextBox* txtbox = Cast<UEditableTextBox>(GetWidgetFromName("TxtBoxPwd")))
	{
		TxtBoxPwd = txtbox;
	}

	return true;
}

 

其中,这个判断是必须的,否则出现空指针异常:

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

 ComboServer、TxtBoxAccount、TxtBoxPwd三个字符串分别是widget组件ID。另外也不用担心各个组件的层级关系(比如,Image A是Button的子节点),widget蓝图中的所有组件存放在UserWidget中的一个map当中。

 

补充:

父类还有一个函数:

virtual void CustomNativeInitilize() {}

 如果当前实例化的UI不是widget蓝图,而是一个C++ class,在触发Initialize()之后,还会继续触发CustomNativeInitilize(),否则只触发Initialize(),参见UserWidget.cpp:

bool UUserWidget::Initialize()
{
	// If it's not initialized initialize it, as long as it's not the CDO, we never initialize the CDO.
	if ( !bInitialized && !HasAnyFlags(RF_ClassDefaultObject) )
	{
		bInitialized = true;

		// Only do this if this widget is of a blueprint class
		UWidgetBlueprintGeneratedClass* BGClass = Cast<UWidgetBlueprintGeneratedClass>(GetClass());
		if ( BGClass != nullptr )
		{
			BGClass->InitializeWidget(this);
		}
		else
		{
			CustomNativeInitilize();
		}

 

第二种方式:NativeConstruct()函数中初始化。

 

void UDebugTestUI::NativeConstruct()
{
	Super::NativeConstruct();

	TxtDebugMsg = Cast<UTextBlock>(GetWidgetFromName(TEXT("TxtDebugMsg")));
}

 

分享到:
评论

相关推荐

    UE5 UMG滚动框可从前从后添加新UI思路

    UE5 UMG滚动框可从前从后添加新UI思路

    UE4 CanvasUI遮罩

    在UE4中,CanvasUI基于UMG(Unreal Motion Graphics),这是一个强大的2D UI设计工具,允许通过直观的可视化编辑器创建复杂的用户界面。Canvas是UMG中的一个基本元素,它是一个二维画布,可以添加各种UI组件,如文本...

    UMG图表控件+UE5插件+曲线图、饼图、环状图、柱状图

    在UMG设计界面中,你就可以找到新添加的图表组件,将其拖放到界面上,并通过属性设置来配置图表的数据源、样式和交互行为。 总的来说,"UMG图表控件+UE5插件"提供了一套完整的解决方案,用于在Unreal Engine5项目中...

    UE5 蓝图 UMG实现日历系统

    UE5 蓝图 UMG实现日历系统.

    UE4 跑马灯文本

    UE4 UMG 跑马灯字幕效果 大概的思路就是将Text 放置到ScrollBox 中 通过tick 不断移动scroll 的Offset 达到Text文本自动滚动的效果 唯一有点难度的就是判断scroll 是否滚动到末尾 然后从头播放 蓝图就是

    UE4 UI简单例子 C++

    在UE4(Unreal Engine 4)中,UI系统基于UMG(Unreal Motion Graphics),它提供了一种可视化的方式去创建用户界面,并且可以与C++代码深度集成。本示例"UE4 UI简单例子 C++"展示了如何利用C++编程语言在UE4中创建一...

    MyColorPicker4.22.zip——UE4拾色器插件

    插件的主要特性在于它可以被直接在UMG(Unreal Motion Graphics)中调用,UMG是UE4内置的一种UI系统,用于创建交互式的2D和3D用户界面。通过在UMG中集成拾色器,开发者可以轻松地在游戏界面中添加色彩选择功能,比如...

    UE4文件拖拽窗口插件

    在UE4(Unreal Engine 4)中,文件拖拽窗口插件是一种增强用户交互功能的工具,允许用户通过简单的拖放操作将外部文件导入到游戏引擎中。这种功能对于内容创作者、开发者以及测试者来说非常实用,因为它提高了工作...

    UE4加载本地图片本地图片

    在UE4(Unreal Engine 4)中,加载本地图片是一项基本操作,广泛应用于游戏开发、虚拟现实场景创建以及各种视觉展示项目。本教程将详细解释如何在UE4中加载和使用本地图片。 首先,我们需要了解UE4的项目结构。一个...

    UE4插件VictoryPlugin-master

    在Unreal Engine 4(简称UE4)的开发过程中,插件扮演着至关重要的角色,它们能够扩展游戏引擎的功能,提高开发效率。VictoryPlugin是UE4的一个第三方插件,其master版本提供了通过路径加载图片的实用功能。本文将...

    UE4外发光材质

    UE4后处理材质资源,描边高亮效果。UE4后处理材质资源,描边高亮效果。

    UE4(虚幻4)制作跑酷小游戏

    UE4的UMG(Unreal Motion Graphics)系统允许创建自定义的2D和3D界面组件。 6. **音效与音乐**:合适的音效和背景音乐可以极大地提升游戏氛围。UE4支持导入音频文件,并通过事件驱动的方式在特定时刻播放。 7. **...

    RenderWidgetToTarget:用于将UMG小部件呈现到RenderTarget的插件

    总之,RenderWidgetToTarget插件是UE4开发中增强UI交互性和视觉创新的一个有力工具,通过它可以轻松地将UMG小部件的渲染与场景的3D部分结合起来,创造出更加丰富和引人入胜的游戏体验。对于希望提升UE4项目UI质量的...

    KantanCharts:UE4 插件提供简单的 UMGSlate 图表绘制

    UMG是UE4内置的一种强大的用户界面系统,而Slate是UMG的核心组件,用于创建丰富的2D图形界面。KantanCharts的出现,使得在UE4中创建各种图表如折线图、柱状图、饼图等变得更加便捷。 KantanCharts的核心功能在于其...

    UE4多关卡切换_详细讲解案例.doc

    本文将详细介绍如何在UE4中实现多关卡之间的流畅切换,以及如何与UMG(Unreal Motion Graphics)结合以创建丰富的用户界面。 首先,我们要了解在UE4中,流关卡(Streaming Level)的概念。流关卡允许游戏在运行时...

    UE4_TinyGUI.zip

    UMG允许开发者以可视化的方式创建和组织UI组件,但其灵活性和扩展性在面对大型项目时可能会显得不足。这就引出了TinyGUI的出现——一个专为UE4定制的UI框架,旨在简化和增强UE4的UI开发体验。 TinyGUI的核心在于它...

    UE5中快速创建绑定的全面指南

    在虚幻引擎5(UE5)中,创建绑定是动画制作流程的关键步骤。绑定定义了角色的骨骼结构和动画控制方式,对于实现...本文提供的信息和代码示例应该能帮助开发者更好地理解UE5中的绑定创建过程,并将其应用于实际项目中。

    UE4 局域网多人联机项目

    UE4局域网多人联机,其中包含背包系统,动画系统,角色生成系统,计时器,敌人生成系统,UI系统,救人系统(模仿吃鸡救人),子弹后坐力系统,十字准心位置,掉血系统,伤害系统,UMG界面布局系统,一套完整的局域网...

    ue4-uitween:C ++中的虚幻4 UMG UI补间插件

    UE4 / UMG的UI补间库使用C ++为UMG小部件创建简单的补间。 UBUITween::Create ( SomeWidget, 0 . 2f ).FromTranslation( FVector2D( - 100 , 0 ) ).FromOpacity( 0 . 2f ).ToTranslation( FVector2D( 20 , 10 ) )....

    UE4关卡切换Loading界面插件

    4. **关卡切换逻辑**:在UE4中,关卡切换涉及多个步骤,包括加载资产、设置场景、初始化角色等。插件需要正确地集成到这个流程中,确保在适当的时间显示加载界面,然后在加载完成时平滑地隐藏它。 5. **性能优化**...

Global site tag (gtag.js) - Google Analytics