原文作者:@玄冬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思路
在UE4中,CanvasUI基于UMG(Unreal Motion Graphics),这是一个强大的2D UI设计工具,允许通过直观的可视化编辑器创建复杂的用户界面。Canvas是UMG中的一个基本元素,它是一个二维画布,可以添加各种UI组件,如文本...
在UMG设计界面中,你就可以找到新添加的图表组件,将其拖放到界面上,并通过属性设置来配置图表的数据源、样式和交互行为。 总的来说,"UMG图表控件+UE5插件"提供了一套完整的解决方案,用于在Unreal Engine5项目中...
UE5 蓝图 UMG实现日历系统.
UE4 UMG 跑马灯字幕效果 大概的思路就是将Text 放置到ScrollBox 中 通过tick 不断移动scroll 的Offset 达到Text文本自动滚动的效果 唯一有点难度的就是判断scroll 是否滚动到末尾 然后从头播放 蓝图就是
在UE4(Unreal Engine 4)中,UI系统基于UMG(Unreal Motion Graphics),它提供了一种可视化的方式去创建用户界面,并且可以与C++代码深度集成。本示例"UE4 UI简单例子 C++"展示了如何利用C++编程语言在UE4中创建一...
插件的主要特性在于它可以被直接在UMG(Unreal Motion Graphics)中调用,UMG是UE4内置的一种UI系统,用于创建交互式的2D和3D用户界面。通过在UMG中集成拾色器,开发者可以轻松地在游戏界面中添加色彩选择功能,比如...
在UE4(Unreal Engine 4)中,文件拖拽窗口插件是一种增强用户交互功能的工具,允许用户通过简单的拖放操作将外部文件导入到游戏引擎中。这种功能对于内容创作者、开发者以及测试者来说非常实用,因为它提高了工作...
在UE4(Unreal Engine 4)中,加载本地图片是一项基本操作,广泛应用于游戏开发、虚拟现实场景创建以及各种视觉展示项目。本教程将详细解释如何在UE4中加载和使用本地图片。 首先,我们需要了解UE4的项目结构。一个...
在Unreal Engine 4(简称UE4)的开发过程中,插件扮演着至关重要的角色,它们能够扩展游戏引擎的功能,提高开发效率。VictoryPlugin是UE4的一个第三方插件,其master版本提供了通过路径加载图片的实用功能。本文将...
UE4后处理材质资源,描边高亮效果。UE4后处理材质资源,描边高亮效果。
UE4的UMG(Unreal Motion Graphics)系统允许创建自定义的2D和3D界面组件。 6. **音效与音乐**:合适的音效和背景音乐可以极大地提升游戏氛围。UE4支持导入音频文件,并通过事件驱动的方式在特定时刻播放。 7. **...
总之,RenderWidgetToTarget插件是UE4开发中增强UI交互性和视觉创新的一个有力工具,通过它可以轻松地将UMG小部件的渲染与场景的3D部分结合起来,创造出更加丰富和引人入胜的游戏体验。对于希望提升UE4项目UI质量的...
UMG是UE4内置的一种强大的用户界面系统,而Slate是UMG的核心组件,用于创建丰富的2D图形界面。KantanCharts的出现,使得在UE4中创建各种图表如折线图、柱状图、饼图等变得更加便捷。 KantanCharts的核心功能在于其...
本文将详细介绍如何在UE4中实现多关卡之间的流畅切换,以及如何与UMG(Unreal Motion Graphics)结合以创建丰富的用户界面。 首先,我们要了解在UE4中,流关卡(Streaming Level)的概念。流关卡允许游戏在运行时...
UMG允许开发者以可视化的方式创建和组织UI组件,但其灵活性和扩展性在面对大型项目时可能会显得不足。这就引出了TinyGUI的出现——一个专为UE4定制的UI框架,旨在简化和增强UE4的UI开发体验。 TinyGUI的核心在于它...
在虚幻引擎5(UE5)中,创建绑定是动画制作流程的关键步骤。绑定定义了角色的骨骼结构和动画控制方式,对于实现...本文提供的信息和代码示例应该能帮助开发者更好地理解UE5中的绑定创建过程,并将其应用于实际项目中。
UE4局域网多人联机,其中包含背包系统,动画系统,角色生成系统,计时器,敌人生成系统,UI系统,救人系统(模仿吃鸡救人),子弹后坐力系统,十字准心位置,掉血系统,伤害系统,UMG界面布局系统,一套完整的局域网...
UE4 / UMG的UI补间库使用C ++为UMG小部件创建简单的补间。 UBUITween::Create ( SomeWidget, 0 . 2f ).FromTranslation( FVector2D( - 100 , 0 ) ).FromOpacity( 0 . 2f ).ToTranslation( FVector2D( 20 , 10 ) )....
4. **关卡切换逻辑**:在UE4中,关卡切换涉及多个步骤,包括加载资产、设置场景、初始化角色等。插件需要正确地集成到这个流程中,确保在适当的时间显示加载界面,然后在加载完成时平滑地隐藏它。 5. **性能优化**...