UE5 GAS开发p30 创建UI HUD 血条

新建AuraUserWidget,AuraWidgetController,AuraHUD

首先设置AuraWidgetController.h

// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "AbilitySystemComponent.h" #include "GameFramework/PlayerState.h" #include "UObject/NoExportTypes.h" #include "AuraWidgetController.generated.h" /** * 这段代码定义了一个结构体 FWidgetControllerParams,用于存储与控制 Widget 相关的参数,包括玩家控制器、玩家状态、能力系统组件和属性集等。这些参数可以在 Unreal Engine 中进行编辑,并且可以在蓝图中读写 */ USTRUCT(BlueprintType) struct FWidgetControllerParams { GENERATED_BODY() /*FWidgetControllerParams(){}:这是结构体的默认构造函数。在这个例子中,它被定义为空函数体,因为没有特殊的初始化逻辑需要执行。*/ FWidgetControllerParams(){} /*这是结构体的自定义构造函数。它接受四个参数,分别是指向玩家控制器(PlayerController)、玩家状态(PlayerState)、能力系统组件(AbilitySystemComponent)和属性集(AttributeSet)的指针。*/ FWidgetControllerParams(APlayerController* PC,APlayerState* PS,UAbilitySystemComponent* ASC,UAttributeSet* AS) : PlayerController(PC),PlayerState(PS),AbilitySystemComponent(ASC),AttributeSet(AS) {} /*这里是初始化参数*/ UPROPERTY(EditAnywhere,BlueprintReadWrite) TObjectPtr<APlayerController> PlayerController = nullptr; UPROPERTY(EditAnywhere,BlueprintReadWrite) TObjectPtr<APlayerState> PlayerState = nullptr; UPROPERTY(EditAnywhere,BlueprintReadWrite) TObjectPtr<UAbilitySystemComponent> AbilitySystemComponent = nullptr; UPROPERTY(EditAnywhere,BlueprintReadWrite) TObjectPtr<UAttributeSet> AttributeSet = nullptr; }; UCLASS() class MYGAS_API UAuraWidgetController : public UObject { GENERATED_BODY() public: UFUNCTION(BlueprintCallable) void SetWidgetControllerParams(const FWidgetControllerParams& WidgetControllerParams); protected: UPROPERTY(BlueprintReadOnly,Category="WidgetController") TObjectPtr<APlayerController> PlayerController; UPROPERTY(BlueprintReadOnly,Category="WidgetController") TObjectPtr<APlayerState> PlayerState; UPROPERTY(BlueprintReadOnly,Category="WidgetController") TObjectPtr<UAbilitySystemComponent> AbilitySystemComponent; UPROPERTY(BlueprintReadOnly,Category="WidgetController") TObjectPtr<UAttributeSet> AttributeSet; };

AuraUserWidget.h

// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Blueprint/UserWidget.h" #include "AuraUserWidget.generated.h" /** * */ UCLASS() class MYGAS_API UAuraUserWidget : public UUserWidget { GENERATED_BODY() public: UFUNCTION(BlueprintCallable) void SetWidgetController(UObject* InWidgetController); UPROPERTY(BlueprintReadOnly) TObjectPtr<UObject> WidgetController; protected: UFUNCTION(BlueprintImplementableEvent) void WidgetControllerSet(); };

AuraUserWidget.cpp

// Fill out your copyright notice in the Description page of Project Settings. #include "UI/Widget/AuraUserWidget.h" void UAuraUserWidget::SetWidgetController(UObject* InWidgetController) { if(WidgetController) { WidgetController = InWidgetController; WidgetControllerSet(); } }

AuraHUD.h

// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "GameFramework/HUD.h" #include "UI/Widget/AuraUserWidget.h" #include "AuraHUD.generated.h" /** * */ UCLASS() class MYGAS_API AAuraHUD : public AHUD { GENERATED_BODY() protected: virtual void BeginPlay() override; public: UPROPERTY() TObjectPtr<UAuraUserWidget> OverlayWidget; private: UPROPERTY(EditAnywhere) TSubclassOf<UAuraUserWidget> OverlayWidgetClass; };

在资源内容文件夹新建UI文件夹,并且加入HUD,Overlay,ProgressBar

首先是ProgressBarBase,继承AuraUserWidget,然后这里使用的是SizaBox更改大小,创建Overlay覆盖层再创建image和ProgressBar

新建蓝图和变量SlateBrush

新建Widget,继承ProgressBarBase

然后修改里面的图片

在Overlay文件夹内继承AuraWidget

当我自己跟着视频的时候,在创建Overlay这个Panel内加入Health的这一步引擎报错

LoginId:edee00a84bb31aad766903a2392b159c EpicAccountId:1f362366af2948929c3b625a0f149b84 Assertion failed: LocalPropertyContainer != nullptr [File:D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp] [Line: 2888] UnrealEditor_CoreUObject!UObject::execLet() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:2888] UnrealEditor_CoreUObject!ProcessLocalScriptFunction() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1199] UnrealEditor_CoreUObject!ProcessScriptFunction<void (__cdecl*)(UObject *,FFrame &,void *)>() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1029] UnrealEditor_CoreUObject!ProcessLocalFunction() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1269] UnrealEditor_CoreUObject!ProcessLocalScriptFunction() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1199] UnrealEditor_CoreUObject!ProcessScriptFunction<void (__cdecl*)(UObject *,FFrame &,void *)>() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1029] UnrealEditor_CoreUObject!ProcessLocalFunction() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1269] UnrealEditor_CoreUObject!ProcessLocalScriptFunction() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1199] UnrealEditor_CoreUObject!UObject::ProcessInternal() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1296] UnrealEditor_CoreUObject!UFunction::Invoke() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:6455] UnrealEditor_CoreUObject!UObject::ProcessEvent() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:2127] UnrealEditor_UMG!UUserWidget::NativePreConstruct() [D:\build\++UE5\Sync\Engine\Source\Runtime\UMG\Private\UserWidget.cpp:1355] UnrealEditor_UMG!UUserWidget::OnWidgetRebuilt() [D:\build\++UE5\Sync\Engine\Source\Runtime\UMG\Private\UserWidget.cpp:812] UnrealEditor_UMG!UWidget::TakeWidget_Private() [D:\build\++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:999] UnrealEditor_UMG!UWidget::TakeWidget() [D:\build\++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:916] UnrealEditor_UMG!UCanvasPanelSlot::DragDropPreviewByDesigner() [D:\build\++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\CanvasPanelSlot.cpp:94] UnrealEditor_UMGEditor!SDesignerView::ProcessDropAndAddWidget() [D:\build\++UE5\Sync\Engine\Source\Editor\UMGEditor\Private\Designer\SDesignerView.cpp:2687] UnrealEditor_UMGEditor!SDesignerView::OnDrop() [D:\build\++UE5\Sync\Engine\Source\Editor\UMGEditor\Private\Designer\SDesignerView.cpp:2979] UnrealEditor_Slate!<lambda_471858b7e70a8b68bd65bc435c2a047c>::operator()() [D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Private\Framework\Application\SlateApplication.cpp:5088] UnrealEditor_Slate!FEventRouter::Route<FReply,FEventRouter::FBubblePolicy,FPointerEvent,<lambda_471858b7e70a8b68bd65bc435c2a047c> >() [D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Private\Framework\Application\SlateApplication.cpp:412] UnrealEditor_Slate!FSlateApplication::RoutePointerUpEvent() [D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Private\Framework\Application\SlateApplication.cpp:5083] UnrealEditor_Slate!FSlateApplication::ProcessMouseButtonUpEvent() [D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Private\Framework\Application\SlateApplication.cpp:5601] UnrealEditor_Slate!FSlateApplication::OnMouseUp() [D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Private\Framework\Application\SlateApplication.cpp:5566] UnrealEditor_ApplicationCore!FWindowsApplication::ProcessDeferredMessage() [D:\build\++UE5\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsApplication.cpp:2219] UnrealEditor_ApplicationCore!FWindowsApplication::DeferMessage() [D:\build\++UE5\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsApplication.cpp:2726] UnrealEditor_ApplicationCore!FWindowsApplication::ProcessMessage() [D:\build\++UE5\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsApplication.cpp:1895] UnrealEditor_ApplicationCore!FWindowsApplication::AppWndProc() [D:\build\++UE5\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsApplication.cpp:925] user32 user32 UnrealEditor_ApplicationCore!FWindowsPlatformApplicationMisc::PumpMessages() [D:\build\++UE5\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsPlatformApplicationMisc.cpp:142] UnrealEditor!FEngineLoop::Tick() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:5293] UnrealEditor!GuardedMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:202] UnrealEditor!GuardedMainWrapper() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:107] UnrealEditor!LaunchWindowsStartup() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:244] UnrealEditor!WinMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:282] UnrealEditor!__scrt_common_main_seh() [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288] kernel32 ntdll

于是我在AuraUserWidget.cpp内加上了if,判断当前WidgetController是否是真

void UAuraUserWidget::SetWidgetController(UObject* InWidgetController) { if(WidgetController) { WidgetController = InWidgetController; WidgetControllerSet(); } }

加上后就可以正常编译了

在内容内新建HUD,继承AuraHud.h

把Overlay Widget Class修改成创建的WBP_Overlay

最后放入Gamemode内

相关推荐
星火撩猿4 小时前
常见游戏引擎介绍与对比
unity·ue5·游戏引擎·godot
sky_smile_Allen5 小时前
[Unity]-[UI]-[Prefab] 关于Unity UGUI 的布局及组件讲解
ui·unity·游戏引擎
清流君6 小时前
【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作
数据库·人工智能·笔记·mysql·ue5·数字孪生
Python_金钱豹6 小时前
Text2SQL零代码实战!RAGFlow 实现自然语言转 SQL 的终极指南
前端·数据库·sql·安全·ui·langchain·机器人
Involuter17 小时前
UE5 Assimp 自用
ue5
Quz18 小时前
使用Qt Quick Controls创建自定义日历组件
qt·ui·交互
电子云与长程纠缠19 小时前
Unreal Niagara制作SubUV贴图翻页动画
学习·ue5·编辑器·贴图·niagara
子燕若水1 天前
“Daz to Unreal”将 G8 角色(包括表情)从 daz3d 导入到 UE5。在 UE5 中,我发现使用某个表情并与闭眼混合后,上眼睑出现了问题
3d·ue5
半天法师1 天前
UE5.2+VarjoXR3,Lumen、GI、Nanite无效的两种解决方案
ue5·xr·vr
ue星空1 天前
UE5摄像机画面没有填充满屏幕有黑边
ue5