官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets

这篇具有很好参考价值的文章主要介绍了官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文主要面向UMG以及Common UI的初学者

效果展示

官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets,虚幻引擎官方案例详解合集,老王的游戏开发教程,ue5,虚幻,Common UI,UMG,虚幻引擎

概要

这个例子非常简单,定义了1+3个Common Activatable Widget

官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets,虚幻引擎官方案例详解合集,老王的游戏开发教程,ue5,虚幻,Common UI,UMG,虚幻引擎

CommonUI_ActivatableWidgets相当于一个容器包含了其它3个Common Activatable Widget ,CommonUI_ActivatableWidgets里没有什么逻辑,窗口弹出/切换的逻辑在CommonUI_BaseLayer里,CommonUI_BaseLayer通过变量引用了另外两个Common Activatable Widget

官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets,虚幻引擎官方案例详解合集,老王的游戏开发教程,ue5,虚幻,Common UI,UMG,虚幻引擎

Activate和Deactivate

官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets,虚幻引擎官方案例详解合集,老王的游戏开发教程,ue5,虚幻,Common UI,UMG,虚幻引擎

Activate Widget都干了些什么?

void UCommonActivatableWidget::ActivateWidget()
{
	if (!bIsActive)
	{
		InternalProcessActivation();
	}
}

void UCommonActivatableWidget::InternalProcessActivation()
{
	UE_LOG(LogCommonUI, Verbose, TEXT("[%s] -> Activated"), *GetName());

	bIsActive = true;
	NativeOnActivated();
}

void UCommonActivatableWidget::NativeOnActivated()
{
	if (ensureMsgf(bIsActive, TEXT("[%s] has called NativeOnActivated, but isn't actually activated! Never call this directly - call ActivateWidget()")))
	{
		if (bSetVisibilityOnActivated)
		{
			SetVisibility(ActivatedVisibility);
			UE_LOG(LogCommonUI, Verbose, TEXT("[%s] set visibility to [%s] on activation"), *GetName(), *StaticEnum<ESlateVisibility>()->GetDisplayValueAsText(ActivatedVisibility).ToString());
		}

		if (CommonUI::IsEnhancedInputSupportEnabled() && InputMapping)
		{
			if (const ULocalPlayer* LocalPlayer = GetOwningLocalPlayer())
			{
				if (UEnhancedInputLocalPlayerSubsystem* InputSystem = LocalPlayer->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>())
				{
					InputSystem->AddMappingContext(InputMapping, InputMappingPriority);
				}
			}
		}

		BP_OnActivated();
		OnActivated().Broadcast();
		BP_OnWidgetActivated.Broadcast();
	}
}
	UPROPERTY(EditAnywhere, Category = Activation, meta = (InlineEditConditionToggle = "ActivatedVisibility"))
	bool bSetVisibilityOnActivated = false;

在每个Common Activatable Widget 可以通过Activated Visibility以及Dezctivated Visibility来定义该Common Activatable Widget 被激活/取消激活时的可见性行为

官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets,虚幻引擎官方案例详解合集,老王的游戏开发教程,ue5,虚幻,Common UI,UMG,虚幻引擎

可见性绑定

官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets,虚幻引擎官方案例详解合集,老王的游戏开发教程,ue5,虚幻,Common UI,UMG,虚幻引擎

	/**
	 * Visibilities to use for when bound widgets in BindVisibilityToActivation are activated.
	 *
	 * @param	OnActivatedVisibility	- Visibility for when bound widgets are active
	 * @param	OnDeactivatedVisibility - Visibility for when bound widgets are not active, not used if this widget has activation / deactivation visibilities
	 * @param	bInAllActive			- True if we should switch to activated visibility only when all bound widgets are active
	 */

void UCommonActivatableWidget::SetBindVisibilities(ESlateVisibility OnActivatedVisibility, ESlateVisibility OnDeactivatedVisibility, bool bInAllActive)
{
	ActivatedBindVisibility = OnActivatedVisibility;
	DeactivatedBindVisibility = OnDeactivatedVisibility;
	bAllActive = bInAllActive;
}

	/**
	 * Bind our visibility to the activation of another widget, useful for making mouse collisions behave similiar to console navigation w.r.t activation
	 * Will immediately update visibility based on the bound widget activation & visibilites set by SetBindVisibilities.
	 *
	 * @param	ActivatableWidget		- The widget whose activation / deactivation will modify our visibility 
	 */

void UCommonActivatableWidget::BindVisibilityToActivation(UCommonActivatableWidget* ActivatableWidget)
{
	if (ActivatableWidget && !VisibilityBoundWidgets.Contains(ActivatableWidget))
	{
		VisibilityBoundWidgets.Add(ActivatableWidget);
		ActivatableWidget->OnActivated().AddUObject(this, &UCommonActivatableWidget::HandleVisibilityBoundWidgetActivations);
		ActivatableWidget->OnDeactivated().AddUObject(this, &UCommonActivatableWidget::HandleVisibilityBoundWidgetActivations);

		HandleVisibilityBoundWidgetActivations();
	}
}

UI动画

官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets,虚幻引擎官方案例详解合集,老王的游戏开发教程,ue5,虚幻,Common UI,UMG,虚幻引擎
动画播放及用动画触发UI切换

官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets,虚幻引擎官方案例详解合集,老王的游戏开发教程,ue5,虚幻,Common UI,UMG,虚幻引擎

设置Common Activatable Widget的默认焦点

覆盖BP_FetDesiredFocusTarget

官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets,虚幻引擎官方案例详解合集,老王的游戏开发教程,ue5,虚幻,Common UI,UMG,虚幻引擎文章来源地址https://www.toymoban.com/news/detail-676601.html

到了这里,关于官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包