UE5 GAS开发P31 将hud绑定在自己的角色上

在WidgetController内新建一个OverlayAuraWidgetController,然后修改HUD的初始状态

AuraHUD

// 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 "UI/WidgetController/OverlayAuraWidgetController.h" #include "AuraHUD.generated.h" struct FWidgetControllerParams; /** * */ UCLASS() class MYGAS_API AAuraHUD : public AHUD { GENERATED_BODY() protected: public: UPROPERTY() TObjectPtr<UAuraUserWidget> OverlayWidget; UOverlayAuraWidgetController* GetOverlayAuraWidgetController(const FWidgetControllerParams& WCParams); void InitOverlay(APlayerController* PC,APlayerState* PS,UAbilitySystemComponent* ASC , UAttributeSet* AS); private: UPROPERTY(EditAnywhere) TSubclassOf<UAuraUserWidget> OverlayWidgetClass; UPROPERTY() TObjectPtr<UOverlayAuraWidgetController> OverlayAuraWidgetController; UPROPERTY(EditAnywhere) TSubclassOf<UOverlayAuraWidgetController> OverlayAuraWidgetControllerClass; };

AuraHUD.cpp

// Fill out your copyright notice in the Description page of Project Settings. #include "UI/HUD/AuraHUD.h" UOverlayAuraWidgetController* AAuraHUD::GetOverlayAuraWidgetController(const FWidgetControllerParams& WCParams) { if(OverlayAuraWidgetController==nullptr) { OverlayAuraWidgetController = NewObject<UOverlayAuraWidgetController>(this,OverlayAuraWidgetControllerClass); OverlayAuraWidgetController->SetWidgetControllerParams(WCParams); return OverlayAuraWidgetController; } return OverlayAuraWidgetController; } void AAuraHUD::InitOverlay(APlayerController* PC, APlayerState* PS, UAbilitySystemComponent* ASC, UAttributeSet* AS) { checkf(OverlayWidgetClass , TEXT("Overlay Widget Class uninitialized , please fill out BP_AuraHUD")); checkf(OverlayAuraWidgetControllerClass , TEXT("Overlay Widget Class uninitialized , please fill out OverlayAuraWidgetControllerClass")); UUserWidget* Widget = CreateWidget<UUserWidget>(GetWorld(),OverlayWidgetClass); OverlayWidget = Cast<UAuraUserWidget>(Widget); //创建一个 FWidgetControllerParams 结构 const FWidgetControllerParams WidgetControllerParams(PC,PS,ASC,AS); //将 FWidgetControllerParams 传到上面的 GetOverlayAuraWidgetController 内 UOverlayAuraWidgetController* WidgetController = GetOverlayAuraWidgetController(WidgetControllerParams); OverlayWidget->SetWidgetController(WidgetController); Widget->AddToViewport(); }

回到AuraCharacter内修改初始化

AuraCharacter.cpp

void AAuraCharacter::InitAbilityActorInfo() { AAuraPlayerState* AuraPlayerState = GetPlayerState<AAuraPlayerState>(); check(AuraPlayerState); AuraPlayerState->GetAbilitySystemComponent()->InitAbilityActorInfo(AuraPlayerState,this); AbilitySystemComponent = AuraPlayerState->GetAbilitySystemComponent(); AttributesSet = AuraPlayerState->GetAttributeSet(); //当角色初始化的时候加载UI的初始化 if(AAuraPlayerController* AuraPlayerController = Cast<AAuraPlayerController>(GetController())) { //获得HUD AAuraHUD* AuraHUD = Cast<AAuraHUD>(AuraPlayerController->GetHUD()); AuraHUD->InitOverlay(AuraPlayerController,AuraPlayerState,AbilitySystemComponent,AttributesSet); } }

回到蓝图,在WBP_AuraHUD内的OverlayAuraWidgetController内添加新创建的OverlayAuraWidgetController

相关推荐
龙智DevSecOps解决方案2 小时前
Perforce演讲回顾(上):从UE项目Project Titan,看Helix Core在大型游戏开发中的版本控制与集成使用策略
游戏·ue5·源代码管理·perforce·helix core
我救我自己2 天前
UE5.4.3 录屏回放系统ReplaySystem蓝图版
java·前端·ue5
cainiao0806053 天前
UE4/UE5开发资源
ue5·ue4
charon87784 天前
Unreal 实现建造游戏|地面交互shader
游戏·ue5·游戏引擎·虚幻
周周的Unity小屋4 天前
UE5蓝图实战:动态墙上挖坑与自定义坑尺寸
ue5·蓝图挖坑
@Unity打怪升级6 天前
Unity 与虚幻引擎对比:两大游戏开发引擎的优劣分析
游戏·unity·ue5·游戏引擎·ue4·游戏程序·虚幻
timidcatt7 天前
独立游戏《Project:Survival》UE5C++开发日志0——游戏介绍
c++·游戏·ue5
charon87787 天前
Unreal Engine 5 C++: 插件编写03 | MessageDialog
c++·ue5·游戏引擎·虚幻
charon87787 天前
UE5: Content browser工具编写02
c++·ue5·游戏引擎
ue星空8 天前
在虚幻引擎中实现Camera Shake 相机抖动/震屏效果
ue5·虚幻·虚幻引擎