虚幻引擎_用户小控件_准星

虚幻引擎4集成Web UI:BLUI插件原理、实战与性能优化指南 在现代游戏开发中,用户界面(UI)的构建效率和表现力至关重要。传统游戏引擎的原生UI系统虽然性能出色,但在处理复杂布局、动态数据和现代交互动效时往往开发效率较低。通过嵌入式浏览器框架(如Chromium Embedded Framework)将Web技术(HTML、CSS、JavaScript)引入游戏引擎,成为一种高效的解决方案。其技术原理在于,在游戏进程内创建一个独立的渲染进程,将网页内容渲染为动态纹理,并与游戏核心逻辑通过进程间通信进行数据交换。这种架构的价值在于,开发者可以利用成熟的前端技术栈(如V 阅读详情

我们有一个需求: 构建一个用户小控件, 用来在屏幕上显示一个准星

创建十字准星蓝图的步骤:

  1. 创建 C++ 类:
    新建继承自UserWidget类型的 C++ 类,命名为HUDWidget。
  2. 生成蓝图子类:
    基于上述HUDWidget类,创建一个对应的蓝图子类, 命名为WBP_HUD
  3. 制作十字准星:
    在蓝图中添加画板, 然后再添加文本组件,用 “+” 符号作为十字准星的显示内容。
  4. 锚定位置:
    将这个文本组件的锚点设置为屏幕中心,确保准星显示在画面正中间。

在C++中调用十字准星蓝图:

调用十字准星蓝图:
可以在玩家控制器中调用, 也可以在游戏模式类中调用;

这里我们以玩家控制器举例:
我们先在玩家控制器C++类中写好接口, 再把十字准星蓝图挂载到接口上去;

写接口:

//XXXPlayerController.h
#include "HUDWidget.h"

public:
	//HUDWidgetClass是连接 “C++ 基类” 和 “蓝图子类” 的 “类选择器”,
	//作用可以通俗理解为:“告诉代码‘你要创建的 HUD Widget,具体是哪个蓝图做的版本’”
	UPROPERTY(EditAnywhere)
	TSubclassOf<UHUDWidget> HUDWidgetClass;
	// 声明一个UHUDWidget类型的指针,用于存储即将创建的Widget实例
	UPROPERTY(VisibleAnywhere)
	UHUDWidget* HUDWidget;
//XXXPlayerController.cpp
void AShooterSamPlayerController::BeginPlay()
{
	Super::BeginPlay();
	if (SVirtualJoystick::ShouldDisplayTouchInterface() && IsLocalPlayerController())
	{
		MobileControlsWidget = CreateWidget<UUserWidget>(this, MobileControlsWidgetClass);
		if (MobileControlsWidget)
		{
			MobileControlsWidget->AddToPlayerScreen(0);

		} else {
			UE_LOG(LogShooterSam, Error, TEXT("Could not spawn mobile controls widget."));
		}
	}
	// 调用虚幻的CreateWidget函数,创建HUDWidget的实例
	// 模板参数<UHUDWidget>:指定要创建的Widget类是我们定义的UHUDWidget
	// 第一个参数this:表示“拥有这个Widget的对象”(这里通常是PlayerController类的实例)
	// 第二个参数HUDWidgetClass:是TSubclassOf<UHUDWidget>类型的变量(需在编辑器中指定对应的蓝图子类)
	HUDWidget = CreateWidget<UHUDWidget>(this, HUDWidgetClass);

	// 检查Widget是否成功创建(避免空指针访问,防止崩溃)
	if (HUDWidget)
	{
		// 调用AddToViewport():将创建好的Widget添加到游戏视口层
		// 执行后,十字准星(HUDWidget里的内容)就会显示在游戏屏幕上
		HUDWidget->AddToViewport();
	}
}

挂载蓝图

打开BP_XXXPlayerController玩家控制器蓝图, 选择我们的十字准星蓝图WBP_HUD;

最终效果:

TSubclassOf<T> 是什么?

TSubclassOf<T> 是虚幻引擎 C++ 中一个非常重要且特有的模板类型。

用一句话最直白地解释:它是一个“带有过滤器”的类选择器, 用于接受一个T的子类型, 然而T的子类型大概率就是T的蓝图, 因为T蓝图就是基础自T的一个特殊C++类

它的全称意思是:Type Subclass Of T(T 类型的子类)。

为了让你彻底理解,我们把 UClass*(普通类指针)和 TSubclassOf<T> 做个对比。


1. 如果你只用普通的 UClass* (没有过滤器)

假设你想在代码里生成一把武器,你定义了一个变量让策划在编辑器里选:

// 这里的 * 表示任意类型的类(可以是角色、UI、特效、甚至声音类)
UPROPERTY(EditAnywhere)
UClass* WeaponClass;

后果:
在编辑器的下拉菜单里,你会看到成千上万个选项。
策划可能会手滑,选了一个 UTexture(图片类)或者 AMyTank(坦克类)放进去。

当你代码执行 SpawnActor<AWeapon>(WeaponClass) 时,如果策划选的是个“图片类”,游戏就会崩溃或者报错,因为你没法把一张图片生成为一把枪。


2. 如果你用 TSubclassOf<AWeapon> (有过滤器)

// 这里的 <> 里的 AWeapon 就是过滤器
// 意思是:这个变量只能存 AWeapon 或者 AWeapon 的儿子、孙子
UPROPERTY(EditAnywhere)
TSubclassOf<AWeapon> WeaponClass;

后果:

  1. 编辑器表现:在下拉菜单里,UE 会自动过滤掉所有无关的类。你只能看到 BP_Rifle(步枪)、BP_Pistol(手枪)等继承自 AWeapon 的蓝图。你根本选不到 BP_Tank 或 Texture。

  2. 代码安全:编译器知道 WeaponClass 里面装的一定是武器。


3. 回到你的代码:TSubclassOf<UHUDWidget>

你在代码里写:

UPROPERTY(EditAnywhere)
TSubclassOf<UHUDWidget> HUDWidgetClass;

这行代码的意思是:

“嘿,虚幻编辑器,请在属性面板里给我生成一个下拉框。但是,这个下拉框里只允许显示 UHUDWidget 的子类(比如你做的 WBP_GameHUD, WBP_HealthBar)。不要把那些乱七八糟的坦克蓝图、子弹蓝图显示出来让我选。”

为什么要这么做?

因为 CreateWidget<UHUDWidget>(...) 函数在创建 UI 时,它要求你传入的那个“配方”(Class),必须得是 UHUDWidget 类型的。如果你传个 ATank 类进去,Widget 创建工厂就罢工了。

总结

  • TSubclassOf<T> = 类型安全的类引用。

  • 作用 1 (给策划看):在编辑器里缩小选择范围,防止选错,只显示特定类型的蓝图。

  • 作用 2 (给代码看):保证类型安全,避免把“坦克类”传给“生成子弹”的函数。

那我为什么不直接把我需要的控件蓝图传进去, 用HUDWidget直接接受, 都不需要额外创建然后赋值给HUDWidget
UPROPERTY(EditAnywhere)
UHUDWidget* HUDWidget;

这是一个非常直觉的想法,很多刚转虚幻的人都会这么想。

但答案是:绝对不行。这样做在编辑器里根本选不中任何东西。

为了让你彻底死心(并彻底理解),我们需要区分两个概念:“硬盘里的图纸” 和 “内存里的实物”。


1. 核心矛盾:图纸 vs 实物

  • 你在内容浏览器(Content Browser)里看到的 WBP_HUD:

    • 它是一个 资产文件(Asset)。

    • 它是一个 类(Class)。

    • 这就好比是一张 “建筑蓝图(图纸)”。你不能住在图纸里,图纸也不能显示血量。

  • 代码里的 UHUDWidget* HUDWidget:

    • 它需要的是一个 内存中的实例(Instance)。

    • 它需要的是一栋 “盖好的房子”。

你的提议:

“我把 WBP_HUD(图纸)直接拖给 HUDWidget(房子指针)。”

结果:

类型不匹配!
就像你想要“吃披萨”,但你把“披萨的菜谱”塞进了嘴里。

UE蓝图实现UI准心锁定敌人:从屏幕交互到空间检测的完整方案 在游戏开发中,空间坐标转换与交互逻辑是实现高级玩法的基础。其核心原理涉及将屏幕二维坐标通过投影矩阵逆向转换为三维世界射线,并结合物理碰撞检测进行目标筛选。这项技术的工程价值在于,它能够在不依赖C++编码的情况下,通过可视化编程构建高效的空间感知系统,显著提升原型开发速度。典型的应用场景包括第三人称动作游戏的主动瞄准、ARPG的目标锁定以及特殊技能系统的交互设计。本文以虚幻引擎蓝图为核心,详细解析了如何实现一套由玩家控制的UI准心锁定机制,其中巧妙运用了**区域投射**进行高效检测,并通过**蓝图与C++混合 阅读详情

相关推荐

UE5新手教程:5分钟用蓝图创建可交互HUD界面

在游戏开发中,用户界面(UI)是连接玩家与虚拟世界的直接桥梁,其核心原理是通过可视化组件实时反映游戏状态。从技术实现层面,现代游戏引擎普遍采用基于组件的UI系统,通过数据绑定与事件驱动机制实现高效的状态同步。Unreal Engine 5中的UMG(Unreal Motion Graphics)系统正是这一理念的工程实践,它允许开发者通过**控件蓝图**进行可视化编辑,结合**玩家控制器**实现动态交互。这种方案不仅降低了开发门槛,其事件驱动的架构更避免了性能损耗,适用于从基础状态显示到复杂系统界面的各类应

weixin_33736832的博客 483

【UE5初学者教程系列之恐怖冒险类游戏(蓝图版)】5、添加准星

打开准星 填充屏幕改为屏幕上所需 添加尺寸框组件 重载宽度和高度 5 添加image组件,放在尺寸框下面。创建UMG文件夹 创建用户界面 用户控件 起名 W_MainHUD 在创建一个W_Crosshair。创建Texture文件夹,导入准星,打开 压缩设置改为用户界面2D 纹理组改为UI。打开主界面HUD 添加画布面板,放准星HUD 尺寸5 锚点居中 位置归零 对齐0.5。

u012177821的博客 589

UE5第一人称射击模板深度解析:从蓝图架构到自定义开发实战

在游戏开发领域,蓝图(Blueprints)作为虚幻引擎(Unreal Engine)的核心视觉化脚本系统,是构建游戏逻辑的基石。其原理在于通过节点连接实现编程逻辑,降低了开发门槛,让开发者能快速原型迭代。这一技术的核心价值在于将复杂的代码逻辑转化为直观的图形化操作,极大地提升了开发效率,尤其在快速验证玩法(Gameplay)和构建交互系统时优势明显。其应用场景广泛覆盖了角色控制、AI行为、UI交互和游戏规则管理。本文聚焦于UE5的第一人称射击(FPS)游戏模板,深入剖析其以蓝图为核心的架构设计,涵盖游戏模

weixin_30855761的博客 365

UE5 虚幻引擎中UI、HUD和UMG的区别与联系

UI是指游戏中与用户交互的元素和界面,包括各种控件和交互操作方式。HUD是显示在玩家角色视角前方的信息层,用于显示游戏状态和重要信息。UMG是UE4中基于虚幻蓝图的UI系统,用于创建和管理UI界面,提供了可用的控件和交互逻辑编写的功能。在UE5中,通常使用UMG来创建UI界面,然后将其与HUD相关联,在游戏中显示和管理UI元素和交互。

hhw_hhw的博客 7004

UE蓝图动态UI定位:从坐标转换到性能优化的完整指南

在游戏开发中,UI交互的流畅度直接影响用户体验,而动态UI定位是实现这一目标的核心技术。其原理基于坐标空间转换,涉及局部空间、世界空间、视口空间和画布空间之间的映射关系。通过蓝图节点如Project World Location to Screen和Viewport to Widget Absolute,开发者可以将3D游戏世界中的物体位置精确映射到2D屏幕界面。这项技术的价值在于提升UI的响应性和沉浸感,使血条、交互提示等元素能够实时跟随游戏对象。应用场景广泛,包括世界空间UI、鼠标跟随、动态列表布局等。

weixin_34194359的博客 404

【UE功能实现】动态切换软件光标样式

本文详细介绍了在Unreal Engine中实现动态切换软件光标样式的方法。通过创建控件蓝图、配置项目设置以及在关卡蓝图中编写逻辑,开发者可以根据游戏状态(如悬停、攻击)实时切换光标,从而提升交互反馈与沉浸感。文章重点阐述了软件光标相对于硬件光标的优势,并提供了从基础配置到进阶动画的完整实现指南。

weixin_29234509的博客 257

虚幻引擎 C++ 制作“射击FPS游戏“

命名为:BTTask_ClearBlackboardValueUCLASS()public:右击空白处, 添加新的任务节点如果你的任务C++类不需要用到黑板里的内容, 那么就用BTTaskNode类, 不然就用BTTask_BlackboardBase类命名为:BTTaskNode_Shoot//.hUCLASS()public:玩家在阵亡后断开控制器只需在玩家阵亡后调用:DetachFromControllerPendingDestroy();

我的博客主要是用来给我自己复习的,主要是上传一些知识点,小型的项目和功能模块,如果有什么问题或错误麻烦联系我! 1812

深入解析MSPM0系列Keil开发中‘ti_msp_dl_config.h‘缺失问题的根源与修复

本文深入解析TI MSPM0系列Keil开发中'ti_msp_dl_config.h'文件缺失问题的根源与修复方法。该错误常见于编译时提示file not found,主要因SysConfig工具未正确生成或工程路径配置错误导致。文章提供了从环境检查、手动生成文件到工程配置调整的系统化解决方案,帮助开发者快速解决这一常见KEIL开发难题。

gold的博客 969

添加准星,交互开关门

新增一个打开门的时间轴,时间轴就按照之前那样做就行了,然后拉出来门设置相对旋转,因为我们门旋转其实就用动Z轴所以将它分割变化多少还是用Lerp(插值)旋转-90°所以填-90 这样就是0到0.5s转90°,这样编译保存后就能开门了。首先双击打开这个门,在上面碰撞那里点击第三个添加盒体简化碰撞,但是这个碰撞还有问题,因为它不是按着这个蒙版的大小做的碰撞,而是根据模型总的长款做的,所以这个碰撞还需要做个优化。在内容文件夹里新建一个UMG(界面)文件夹,新建两个用户界面 一个HUD也即是主界面,另一个是准星。

2503_92839852的博客 385

神州数码OSPF实战配置详解(手把手教学)

本文提供神州数码设备上OSPF基础配置的详细实战教程。通过搭建典型的两台三层交换机互联实验环境,手把手演示了VLAN创建、接口IP配置、OSPF进程启动、Router-ID设置及网络宣告等核心步骤,并分享了邻居状态验证、路由检查及常见排错方法,帮助网络工程师快速掌握神州数码OSPF的配置要点与操作技巧。

weixin_29210727的博客 79

QCustomPlot实战:从入门到精通的数据可视化

本文详细介绍了如何使用QCustomPlot进行数据可视化,从基础环境搭建到高级图表定制,涵盖实时监控、多坐标系联动等实战技巧。基于Qt的QCustomPlot库以其强大的绘图能力和灵活的API,帮助开发者快速实现专业级数据可视化效果。

weixin_29003437的博客 115

UE5蓝图教程:为恐怖游戏打造动态交互准星系统

在游戏开发中,用户界面(UI)是连接玩家与虚拟世界的桥梁,其设计直接影响操作反馈与沉浸感。基于事件驱动的交互原理,UI组件需要实时响应游戏状态变化,为玩家提供清晰的视觉引导。在虚幻引擎5(UE5)中,UMG(Unreal Motion Graphics)系统与蓝图可视化脚本结合,为开发者提供了强大的工具集,能够高效实现复杂的UI逻辑与动态效果。这种技术方案特别适用于需要细腻交互反馈的游戏类型,例如恐怖冒险游戏。通过构建一个集静态显示、动态反馈、状态切换于一体的准星系统,开发者可以显著提升游戏的代入感和操作手

weixin_32382335的博客 338

记录Rancher集群中coredns问题导致的服务DNS解析超时

coredns问题处理

1359

虚幻引擎游戏开发实战:模块化角色、AI行为树与动态关卡生成系统解析

在游戏开发中,模块化设计与系统架构是构建可维护、可扩展项目的核心。其原理在于通过组件化、继承与接口设计,将复杂功能拆分为独立、可复用的模块,从而提升代码的清晰度与团队协作效率。这种工程实践的价值在于能够显著降低后期维护成本,并支持功能的快速迭代。在应用场景上,尤其适用于需要高度定制角色行为、智能AI敌人以及可重复游玩性的游戏类型,例如第三人称射击、动作冒险或 Roguelike 游戏。本文以虚幻引擎中的具体项目为例,深入剖析了如何实现模块化的角色系统与基于行为树的AI敌人,并构建了一个动态的关卡生成系统,为

weixin_30367169的博客 365

家用扫地机器人研发技术路线-第四部分:如何一步步做出来 | 4阶段 · 从原型到量产

摘要:本文详细介绍了扫地机器人从原型到量产的研发流程,分为4个关键阶段。首先聚焦四大技术难点:SLAM定位、AI视觉识别、仿生机械臂和静音风机系统。研发过程包括实验室原型验证、工程样机测试、小批量真实场景测试和量产导入四个阶段,每个阶段设有严格评审标准。特别强调测试贯穿全程,包括模块单元测试、整机集成测试、长期可靠性测试和多样化场景模拟,确保产品在上市前完成数百次真实环境验证。整个流程体现了从技术攻关到产品落地的系统性工程思维。

智能硬件研发,欢迎交流 191

Central Finance 全景解析:用 SAP S/4HANA 构建跨系统的财务中台与渐进式转型路径

Central Finance 是基于 SAP S/4HANA 的一种部署与应用场景:在不打断现有异构源系统运营的前提下,把多套 SAP 与非 SAP 系统中的财务与管理会计数据实时/准实时复制到一套中心化的 SAP S/4HANA 中,作为统一的记账与分析底座,逐步把选定的财务流程(如预算控制、付款、固定资产结账等)迁入中心系统。这让企业既能快速获得统一报表与统一核算结构,又为未来的整体迁移留出了弹性路径。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 386

【官网】初识UMG_07调整用户界面

【官网】初识UMG

yangzhen_010的博客 247

AI测试干货:让大语言模型稳定输出 JSON 的四种实现方案

用大语言模型做测试用例生成、数据提取时,最头疼的就是让它老老实实返回 JSON。你以为它会给你 `{"name":"张三"}`,结果它来一句"好的,这是生成结果:```json...",或者干脆在 JSON 里加注释,直接把你的 `json.loads()` 干崩溃。 模型本质上是个话痨,天生爱解释。但我们要的是结构化数据,不是聊天记录。我整理了四种实战方案,从最简单的提示词技巧到工程化框架,覆盖了从快速验证到生产环境的各种场景。

blues_C的博客 955

射击游戏案例(三)

添加主界面和射击准星;开火射击的实现思路。

卡西莫多说的博客 2069

深入理解SQL注入中的union select 1,2,3....

UNION 用于合并两个查询的结果集

渗透之路,攻防之间皆学问 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

UE5—UMG介绍

搭建UMG时可以把使用覆层,添加image,设置笔刷图像为设计图,按照设计图进行umg控件的一个摆放,这样看很好的与设计图进行一个对比,完成后可以将image设置隐藏或者删除。可以利用锚点来进行控件的快速定位,不同位置的控件可以通过不同的锚点来实现,如标题栏,可以使用。勾选上是变量之后,可以在图表里找到该控件的变量,如果未勾选,图表中是没有该控件的变量的。HUD:作用于玩家视角,玩家连接期间,一般用于准星,动态文本等,长时间显示的。UMG可以在关卡蓝图,玩家蓝图,玩家控制器蓝图以及HUD蓝图中都可以添加。

qq_59752423的博客 1701

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

UE5 FPS游戏开发实战:从零构建第一人称射击游戏核心系统

游戏开发中,第一人称射击(FPS)是技术复杂度较高的品类,其核心在于实现流畅的玩家交互与沉浸式体验。其基本原理是通过输入系统、动画状态机、物理碰撞检测与人工智能(AI)行为树等模块的协同工作,构建从玩家操作到游戏世界反馈的完整循环。在技术实现上,数据驱动的模块化设计能显著提升项目的可维护性与扩展性。以虚幻引擎5(UE5)为例,开发者可以利用其强大的蓝图可视化脚本系统、Gameplay Ability System(GAS)框架以及原生动画系统,高效搭建包括角色控制、武器射击、敌人AI在内的核心玩法。这些技术

weixin_33841503的博客 349

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

UE5新手必看:3种UI定位方法实战对比(蓝图+控件详解)

本文为UE5新手详细解析了三种核心UI定位方法:屏幕空间、场景空间和世界空间。通过蓝图实战对比,深入探讨了各自的概念差异、适用场景与实现步骤,并整合了UI、蓝图、控件等关键热词,帮助开发者快速掌握如何为HUD、动态标记和场景交互界面选择并实现最合适的定位策略。

kmeans3miner的博客 484

从UE4引擎开始学英语(1)---Behavior

(0)Behavior 行为 (1)Tool Tip Text 工具提示文本 Tooltip text to show when the hovers over the widget with the mouse 用户鼠标悬停在控件上时显示的工具提示文本 (2)Is Enabled 已启用 Sets whether this widget can be modified interactively by the user 设置此控件能否被用户交互修改 (3)Visibility 可视性 The ...

互联网时代,属于我们的时代! 885

ArcGIS for Flex中map控件属性

&lt;!-- 添加Map控件--&gt;    &lt;!-- Map控件的属性            clickRecenterEnabled:true/false     是否开启按shift键点击地图定位中心的功能           crosshairVisible:true/false 是否在地图的中心显示十字           doubleClickZoomEnabled:true...

gis0911178的专栏 501

UE5 UI定位核心指南:锚点、尺寸框与蓝图动态计算实战

在游戏开发与交互界面设计中,UI定位是确保用户体验一致性的关键技术。其核心原理在于通过坐标系转换与布局算法,将界面元素精确、自适应地呈现在不同分辨率的屏幕上。这项技术的价值在于,它直接决定了应用或游戏在多平台、多设备下的视觉表现与可用性。无论是PC游戏、移动应用还是复杂的软件仪表盘,都需要可靠的UI定位方案来应对屏幕适配的挑战。本文聚焦于虚幻引擎5(UE5)的UMG系统,深入剖析其三大核心定位机制:基于锚点的自适应布局、使用尺寸框的精确约束以及通过蓝图脚本的动态计算。通过理解锚点与父容器的相对关系、尺寸框对

weixin_33691700的博客 381
上一篇: Linux---线程_底层原理
下一篇: 虚幻引擎 C++ 制作“射击FPS游戏“
Howrun777
博客等级 码龄1年 133粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值