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

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

文章目录

  • 效果展示
  • 概要
  • Activate和Deactivate
  • 可见性绑定
  • UI动画
  • 设置Common Activatable Widget的默认焦点

效果展示

在这里插入图片描述

概要

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

在这里插入图片描述

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

在这里插入图片描述

Activate和Deactivate

在这里插入图片描述

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 被激活/取消激活时的可见性行为

在这里插入图片描述

可见性绑定

在这里插入图片描述

	/*** 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动画

在这里插入图片描述
动画播放及用动画触发UI切换

在这里插入图片描述

设置Common Activatable Widget的默认焦点

覆盖BP_FetDesiredFocusTarget

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/56339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM本地知识库问答系统(一):使用LangChain和LlamaIndex从零构建PDF聊天机器人指南

随着大型语言模型&#xff08;LLM&#xff09;&#xff08;如ChatGPT和GPT-4&#xff09;的兴起&#xff0c;现在比以往任何时候都更容易构建比普通熊更智能的智能聊天机器人&#xff0c;并且可以浏览堆积如山的文档&#xff0c;为您的输入提供准确的响应。 在本系列中&#xf…

在c++ 20下使用微软的proxy库替代传统的virtual动态多态

传统的virtual动态多态&#xff0c;经常会有下面这样的使用需求&#xff1a; #include <iostream> #include <vector>// 声明一个包含virtual虚函数的基类 struct shape {virtual ~shape() {}virtual void draw() 0; };// 派生&#xff0c;实现virtual虚函数 str…

《Linux从练气到飞升》No.18 进程终止

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

sql:SQL优化知识点记录(三)

&#xff08;1&#xff09;explain之select_type和table介绍 简单的查询类型是&#xff1a;simple 外层 primary&#xff0c;括号里subquery 用到了临时表&#xff1a;derived &#xff08;2&#xff09;explain之select_type介绍 trpe反映的结果与我们sql是否优化过&#xff…

SpringCloud学习笔记(一)_快速入门

SpringCloud简介 Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具&#xff08;例如配置管理&#xff0c;服务发现&#xff0c;断路器&#xff0c;智能路由&#xff0c;微代理&#xff0c;控制总线&#xff09;。分布式系统的协调导致了样板模式, 使用Spr…

大语言模型的分布式训练

什么是大语言模型 大语言模型(Large Language Model,缩写LLM),也称大型语言模型,是一种人工智能模型,旨在理解和生成人类语言。它们在大量的文本数据上进行训练,可以执行广泛的任务,包括文本总结、翻译、情感分析等等。LLM的特点是规模庞大,包含数十亿的参数,帮助它们学习语言…

图片的宽高等比例放大缩小使用padding-bottom来实现

图片的宽高等比例放大缩小使用padding-bottom来实现 使用padding-bottom来实现图片或容器的等比例放大和缩小是一个巧妙的技巧&#xff0c;特别是在制作响应式设计时。这种方法依赖于CSS的一个特点&#xff1a;当为元素设置百分比的padding-bottom或padding-top时&#xff0c;这…

Android 可扩展的网络请求框架

网络框架设计 搭建一个通用的、扩展性好、解耦合的网络框架需要一些设计和技术策略。以下是一些步骤和建议&#xff0c;可以帮助您构建一个高质量的网络框架&#xff1a; 明确需求&#xff1a; 在开始之前&#xff0c;明确您的项目需求和目标。考虑您需要支持哪些网络协议&…

分布式事务(7):SpringCloud2.0整合LCN

目前LCN版本已经升级为4.0了,但是官方没有SpringCloud2.0的demo案例。 因为LCN本身是开源的,有些大神对LCN框架源码做修改,可以支持SpringCloud2.0版本。 下载地址:https://download.csdn.net/download/u013938578/88251904 1 下载LCN服务端源码 https://download.csdn.…

net.ipv4.ip_forward=0导致docker容器无法与外部通信

在启动一个docker容器时报错&#xff1a; WARNING: IPv4 forwarding is disabled. Networking will not work. 并且&#xff0c;此时本机上的其他容器的网络服务&#xff0c;只能在本机上访问&#xff0c;其他机器上访问不到。 原因&#xff1a; sysctl net.ipv4.ip_forward …

【OpenCV • c++】图像对比度调整 | 图像亮度调整

&#x1f680; 个人简介&#xff1a;CSDN「博客新星」TOP 10 &#xff0c; C/C 领域新星创作者&#x1f49f; 作 者&#xff1a;锡兰_CC ❣️&#x1f4dd; 专 栏&#xff1a;【OpenCV • c】计算机视觉&#x1f308; 若有帮助&#xff0c;还请关注➕点赞➕收藏&#xff…

C# Emgu.CV 条码检测

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Emgu.CV; using Emgu.CV.Util; using static Emgu.C…

机器人制作开源方案 | 桌面级机械臂--本体说明+驱动及控制

一、本体说明 1. 机械臂整体描述 该桌面级机械臂为模块化设计&#xff0c;包含主机模块1个、转台模块1个、二级摆动模块1个、可编程示教盒1个、2种末端执行器、高清摄像头&#xff0c;以及适配器、组装工具、备用零件等。可将模块快速组合为一个带被动关节的串联3自由度机械臂…

【业务功能篇73】web系统架构演变-单体-集群-垂直化-服务化-微服务化

1.服务架构的演 1.1 单体架构 单体架构应该是我们最先接触到的架构实现了&#xff0c;在单体架构中使用经典的三层模型&#xff0c;即表现层&#xff0c;业务逻辑层和数据访问层。 单体架构只适合在应用初期&#xff0c;且访问量比较下的情况下使用&#xff0c;优点是性价比很…

返还给前端数据时间格式使用哪个注解保证只返回时间单位到天

在 Java 中&#xff0c;可以使用 JsonFormat 注解来指定日期时间的格式。如果你只需要返回时间单位到天&#xff0c;可以使用 JsonFormat 注解&#xff0c;并设置 pattern 属性为 “yyyy-MM-dd”。 例如&#xff0c;假设你有一个 POJO 类 DataModel&#xff0c;其中包含一个类…

C#: Json序列化和反序列化,集合为什么多出来一些元素?

如下面的例子&#xff0c;很容易看出问题&#xff1a; 如果类本身的无参构造函数&#xff0c; 就添加了一些元素&#xff0c;那么在序列化&#xff0c;再反序列化&#xff0c;会导致元素增加。 如果要避免&#xff0c;必须添加&#xff1a; new JsonSerializerSettings() { …

Linux目录结构与文件管理(01) (三)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、Linux 系统的组成 二、目录结构 根目录 三、文件管理 目录管理 总结 前言 今天主要学习了Linux的目录结构&#xff0c;主要是一些命令的含义和用法&am…

拼多多anti-token分析

前言&#xff1a;拼多多charles抓包分析发现跟商品相关的请求头里都带了一个anti-token的字段且每次都不一样,那么下面的操作就从分析anti-token开始了 1.jadx反编译直接搜索 选中跟http相关的类对这个方法进行打印堆栈 结合堆栈方法调用的情况找到具体anti-token是由拦截器类f…

Spring 容器启动耗时统计

为了了解 Spring 为什么会启动那么久&#xff0c;于是看了看怎么统计一下加载 Bean 的耗时。 极简版 几行代码搞定。 import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor;import java.util.HashMap; imp…

算法通关村——数组实现加法和幂运算问题解析

1. 数组实现加法 1.1 加一 加一 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 示例 1&#…