UE5学习记录 part13

162 actor components: creating our own components

设置自动导入时都使用/



163 widget components: creating a health bar for enemy

c++实现

space选中world 玩家直到跑到角色面前才能够看见血条;而选中screen 玩家在viewport中看不到widget样式,但在游玩过程中是能够实时不限角度看到血条的



164 user widget class: a c++ class for our health bar widget

We'll save everything and we're going to compile and launch the editor from here in Visual Studio. 我们将保存所有内容,然后我们将在 Visual Studio 中编译并启动编辑器。

So I'm going to hit Control F five. 所以我要按下 Control F 5。

Now, just to side note, sometimes if you close the editor and hit Control F five, you'll get an error 现在,顺便说一下,有时如果你关闭编辑器并按 Ctrl F 五,你会收到一个错误

that says cannot compile while live coding is active. 也就是说,当 Live Coding 处于活动状态时,无法编译。

That means you need to let the editor close down and wait a few seconds so it's completely closed before 这意味着您需要让编辑器关闭并等待几秒钟,以便它在此之前完全关闭

UPROPERTY(meta = (BindWidget))

在 UE(Unreal Engine)中,meta = (BindWidget)UPROPERTY 宏的一个元数据标记,主要用于在 C++ 代码与蓝图中的 UI 元素(Widget)之间建立绑定关系 ,方便在 C++ 中直接访问和操作蓝图创建的 UI 控件。具体作用如下

实现 C++ 与蓝图 UI 控件绑定

在基于 UUserWidget 的子类中,当在 C++ 代码里声明一个 UI 控件指针(如 UButton*UTextBlock* 等 ),同时使用 UPROPERTY(meta = (BindWidget)) 修饰该指针变量时,只要在蓝图中创建同名的 UI 控件,UE 运行时会自动将蓝图中的 UI 控件实例与 C++ 中的指针变量进行绑定。例如,C++ 代码里声明 UPROPERTY(meta = (BindWidget)) UButton* MyButton; ,在蓝图中创建名为 MyButton 的按钮控件,运行时就能实现二者关联,无需手动查找。

简化 UI 控件访问流程

若不使用 meta = (BindWidget) ,要在 C++ 中访问蓝图里的 UI 控件,需通过类似 GetWidgetFromName 等函数手动查找并初始化控件。而使用该标记后,UE 自动完成绑定和初始化,可直接在 C++ 代码中通过绑定的指针操作控件,比如为按钮绑定点击事件等,大大简化了开发流程。

便于 UI 逻辑分离与协作

借助 meta = (BindWidget) ,可在蓝图中专注设计 UI 的样式、布局等外观内容,在 C++ 中编写 UI 相关的逻辑功能(如事件响应、数据交互等 ),实现设计与逻辑的分离,便于团队协作开发。比如 UI 设计师可在蓝图中调整 UI 元素,程序员在 C++ 中实现对应交互逻辑,且不用担心二者连接问题。 另外,还有 meta = (BindWidgetOptional) 变体,若蓝图中不存在同名窗口小部件,不会显示错误 ;若蓝图存在同名且标记为 BindWidget 的属性,需在其 UPROPERTY() 标签中添加 BlueprintReadOnlyBlueprintReadWrite 才能在蓝图中访问 。

修改Widget蓝图所继承的父类

变量要同名



165 setting the health percent : accessing the healthbar userwidget in c++

流程是emeny设置healthbarcomponent的widget为WBP_HealthBar, HealthBarComponent中有HealthBar(父类为widget)的c++成员变量; HealthBar.h(WBP_HealthBar)中有healthbar(UProgressBar)类型(注意其中四者的包含关系,并且是由最外层enemy来指定中层的widget class)

WidgetComponent中UMG_API UUserWidget* GetUserWidgetObject() const;与TSubclassOf<UUserWidget> GetWidgetClass() const { return WidgetClass; }的区别

1. GetUserWidgetObject()

作用
  • 返回当前已实例化的 UMG 控件对象UUserWidget* 类型)。

  • 如果 WidgetComponent 尚未创建控件实例,则返回 nullptr

关键特性
  • 运行时获取 :只能在控件被实际创建后调用(通常在 BeginPlay 之后)。

  • 操作具体实例:可以直接修改控件属性或调用其函数:

2. GetWidgetClass()

作用
  • 返回控件组件的蓝图类定义TSubclassOf<UUserWidget> 类型)。

  • 仅提供类信息,不涉及实例化。

关键特性
  • 设计时/运行时均可调用:即使控件未实例化也能获取。

  • 仅获取元数据:无法直接操作控件逻辑,但可用于:

    • 检查预期的控件类型。

    • 动态创建其他实例:



166 Damage : unreal engine's built-in damage system



167 custom health bar: spicing up the HUD

设置状态栏的压缩



168 enemy death animations: animations for enemy death



169 enemy death: deading some fools

在代码中设置变量之后,如果是资产变量,一般需要在蓝图选择资产



170 death poses: making the enemy stay down

选中当前最后一帧作为动画资产

方法一

方法二 unreal 多线程

修改blender时间



171 polishing enemy death: finishing touches on enemy death

添加对血条的可视化或者隐藏;当角色死亡之后去除角色的胶囊体阻挡;

相关推荐
_Kayo_4 小时前
node.js 学习笔记3 HTTP
笔记·学习
CCCC13101637 小时前
嵌入式学习(day 28)线程
jvm·学习
星星火柴9368 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
小狗爱吃黄桃罐头8 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
艾莉丝努力练剑9 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
武昌库里写JAVA10 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
杜子不疼.10 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
小幽余生不加糖11 小时前
电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
人工智能·笔记·学习·音视频
..过云雨11 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习
myzzb11 小时前
基于uiautomation的自动化流程RPA开源开发演示
运维·python·学习·算法·自动化·rpa