BlueRoseNote/03-UnrealEngine/Gameplay/Lyra/UE5 Lyra学习笔记(6)—CommonUI.md

1.8 KiB
Raw Blame History

title, date, excerpt, tags, rating
title date excerpt tags rating
UE5 Lyra学习笔记(6)—CommonUI 2024-03-22 15:03:59

前言

UGameUIManagerSubsystem

父类为UGameInstanceSubsystem主要的功能是管理CurrentPolicy(UGameUIPolicy)。

UGameUIPolicy

GameplayAbility

Lyra使用2个位于Plugins/ShooterCore/Content/Input/Abilites/

  • GAB_ShowWidget_WhenInputPressed
  • GAB_ShowWidget_WhileInputHeld

GAB_ShowWidget_WhenInputPressed!GAB_ShowWidget_WhenInputPressed.png GAB_ShowWidget_WhileInputHeld略微复杂一些会多一些!GAB_ShowWidget_WhileInputHeld.png

GameplayTasks

核心函数逻辑如下主要调用UPrimaryGameLayout::PushWidgetToLayerStackAsync()

void UAsyncAction_PushContentToLayerForPlayer::Activate()
{
	if (UPrimaryGameLayout* RootLayout = UPrimaryGameLayout::GetPrimaryGameLayout(OwningPlayerPtr.Get()))
	{
		TWeakObjectPtr<UAsyncAction_PushContentToLayerForPlayer> WeakThis = this;
		StreamingHandle = RootLayout->PushWidgetToLayerStackAsync<UCommonActivatableWidget>(LayerName, bSuspendInputUntilComplete, WidgetClass, [this, WeakThis](EAsyncWidgetLayerState State, UCommonActivatableWidget* Widget) {
			if (WeakThis.IsValid())
			{
				switch (State)
				{
					case EAsyncWidgetLayerState::Initialize:
						BeforePush.Broadcast(Widget);
						break;
					case EAsyncWidgetLayerState::AfterPush:
						AfterPush.Broadcast(Widget);
						SetReadyToDestroy();
						break;
					case EAsyncWidgetLayerState::Canceled:
						SetReadyToDestroy();
						break;
				}
			}
			SetReadyToDestroy();
		});
	}
	else
	{
		SetReadyToDestroy();
	}
}