UE 适配与多分辨率
背景写系统过程中不同分辨率浮动处理是经常遇到的问题。
在不同分辨率过程中可能会存在适配问题,手游关联居多,手游之前在Unity开发时已经写过一篇相关文章(UI手机适配 )。
此篇为对于UE引擎下端游适配问题的处理,可包括不同分辨率,带鱼屏等。
2D空间坐标
窗口空间(window Space):程序运行时打开的窗口,此时的整个窗口坐标系(左上至右下)可以理解为Widget的窗口空间,如PIE模式下编辑器的视口,或者正式发布版本的游戏窗口。
屏幕空间(Monitor Space):显示输出设备的整个屏幕大小(左上至右下),如PC的显示器或者手机的屏幕输出。
APIGetLocalSize() 相对大小,一般是由在编辑器内设置的大小决定(TileView组件的Item的大小会受TileView的Entry变量设置的大小影响)。
GetAbsoluteSize() 实际大小,包含对自适应各种分辨率情况下的DPI的设定。
LocalToViewport() 坐标转换,两个引用参数ViewportPosition(相对于父PanelWidget的位置) 和 PixelPositio ...
ue Slate初探
背景在开发上层UMG过程中,有时候会遇到需要更底层的支持,以此为契机,研究Slate使用与底层注意事项。
基本使用Slate是UE中提供的UI框架,它的核心理念如下:
Slate 架构|虚幻引擎5.2文档
关于UI的一些基础概念,可以了解:
现代图形引擎入门指南(七)— GUI
在UE中,使用Slate,需要了解三个核心结构:
FSlateApplication :全局单例,所有UI的调度中心。
SWindow :顶层窗口,持有跨平台窗口的实例(FGenericWindow),提供窗口相关的配置和操作。
SWidget :小部件,划分窗口区域,处理自身区域内的交互和绘制事件。
在UE中,一个简单的Slate使用示例如下:
123456789101112131415161718auto Window = SNew(SWindow) //创建窗口 .ClientSize(FVector2D(600, 600)) //设置窗口大小 [ ...
ue 多线程
背景本篇为UE多线程的使用与底层代码实现的问题。多线程是优化项目性能的重要方式之一。
在系统组工作过程中,听到最多的是优化是对于Flush的禁止工作。防止Loading资源的时候占用资源,这是一个庞大且精细的过程,在顶层编码的时候也需要去注意某些Sync操作是否会引发Flush。Flush这种同步加载的堵塞操作,需要去分析Flush的操作处理。故有此篇作为基础篇,里面涉及到部分的os的基础概念的实现,后续可以去复习一下os的pv操作部分。
本章梳理一下对UE多线程的顶层调用处理。
2025.11.06 关于FQueuedThreadPool 和TaskGraph 后续再研究,埋个坑。
引擎的线程在创建自己的多线程之前,需要先了解UE本身已经运行在多个线程上了,最主要的是:
游戏线程(Game Thread):
这是最主要的线程,大部分的蓝图和C++游戏逻辑都在这里执行。
负责处理玩家输入、Actor的Tick、蓝图逻辑、物理模拟的触发(但计算本身不在主线程)、游戏状态更新等。 当这个线程的任务太重,游戏就会卡顿,帧率(FPS)下降。
渲染线程(Render Thread) ...
ue 增强输入
前言UE5 使用了一个最新的输入架构EnhancedInput(增强输入系统)
简介
增强输入框架就是改进一些过往问题的新答案。它以模块化的方式解耦了从输入的按键配置到事件处理的逻辑处理过程,通过提供输入动作(UInputAction)、输入修改器(UInputModifier)、输入触发器(UInputTrigger)和输入映射环境(UInputMappingContext)这些可组合功能,在新的增强玩家输入(UEnhancedPlayerInput)和增强输入组件( UEnhancedInputComponent)的配合下提供了更灵活和更便利的输入配置和处理功能。考虑到基于 虚幻引擎5(UE5)的项目可能需要更多高级输入功能,例如复杂的输入处理、运行时重新映射输入,我们开发了增强输入插件(Enhanced Input Plugin),以便开发者拥抱次世代项目,同时又能向后兼容 虚幻引擎4(UE4)中的默认输入系统。
目标:
重新梳理简化: Axis/Action —> Action(统一)
运行时重新映射输入场景: UInputMappingContext
对初级用户 ...
ue gc
前言本篇以源码角度解析UE中标记清除算法GC的实现
https://zhuanlan.zhihu.com/p/401956734
UE 4.26
垃圾回收伪实现标记清除算法 、 复制算法 、标记-整理算法 、分代收集算法等。我们就用标记清除算法来实现。标记-清除算法,看名字就知道有两个阶段,标记和清除:
标记:遍历所有对象,根据某种规则,标记其是否需要清除
清除:遍历所有对象,清除标记了的对象,回收内存
因此可知,要实现标记清除垃圾回收,在标记阶段我们需要做到以下两点:
能拿到所有对象
确定对象清除的规则
在自定义的 NewObject 方法内,把生成的对象指针放入全局数组 GUObjectArray ,这样我就能拿到所有对象了
以下就是垃圾回收的伪实现:
启动垃圾回收,加锁( 保持所有对象的引用关系不变 )
设置所有对象为”不可达”标记(根对象、特殊对象 除外)
遍历根对象列表,根对象引用到的对象去除”不可达”标记
收集所有仍然标记为”不可达”的对象,全部删除
GC过程GC 启动
手动:UWorld::ForceGarbageCollection( bool bFullP ...
工具下载与使用备忘
前言本篇为工作过程中对于 工具下载与使用备忘记录。
Beyond Compare 5
使用
对比常用软件
官网
BC5官网:https://www.scootersoftware.com/
无限试用期
参考链接:https://zhuanlan.zhihu.com/p/401663968
修改文件[BCUnrar.dll] ,这个文件重命名或者直接删除。
将以下操作保存为bat文件,然后双击运行即可
绿色版与其他工具
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=441367&extra=
使用简介
https://www.cnblogs.com/xjnotxj/p/12890957.html
Vscode插件记录。
Rideride 占用内存过高解决
https://blog.csdn.net/m0_37735713/article/details/106380607
VS平时编译使用VS
Othergeek.exe
Typora
Everything
UnrealGameSync
Horde ...
ue 编译相关
前言https://zhuanlan.zhihu.com/p/1911596641955328123
编译类型很多人在使用UE4的时候,往往只是依照默认的DevelopmentEditor,但实际上编译选项是非常重要的。 UE4本身包含网络模式和编辑器,这意味着你的工程在部署的时候将包含Server和Client,而在开发的时候,也将有Editor和Stand-alone之分;同时你也可以单独选择是否为Engine和Game生成调试信息,接着你还可以选择是否在游戏里内嵌控制台等。
所以为了我们的调试代码方便,我们选择DebugEditor来加载游戏项目,当需要最简化流程的时候用Debug来运行独立版本。
分为本地编译和UGS编译
UGS官方文档:
https://dev.epicgames.com/documentation/zh-cn/unreal-engine/unreal-game-sync-ugs-for-unreal-engine
UHT相关UHT反射位置
GR> GR Trunk 3> S1Game > Intermediate> Build& ...
UObject
前言本篇为对于大钊老师以及网上资料的对于Uobject 相关的反射底层实现与源码阅读。
https://zhuanlan.zhihu.com/p/22813908?refer=insideue4
https://www.bilibili.com/video/BV1bH4y1k7Wg/?spm_id_from=333.1391.0.0&vd_source=d19e47552f1614194f0d0b0662850083
开篇https://zhuanlan.zhihu.com/p/24319968
藉着UObject提供的元数据、反射生成、GC垃圾回收、序列化、编辑器可见、Class Default Object等,UE可以构建一个Object运行的世界。(后续会有一个大长篇深挖UObject)
其他引擎的对象模型情况Cocos系列,最早是cocos-iphone扎根于objective-c,几乎是机械翻译了objective-c的内存管理机制,搞出了一个CCObject
Unity 上层脚本C#是基于Mono
其他引擎,用的还是C++提供了的那些,顶多自己再定制一些管理辅助类 ...
UE Python
前言 python ue 自动化
本人在工作过程中需要去接入自动化流程,故撰写本篇。
(原生ue-Python真的好难用,悲)
文档Unreal 5.0 Python API
Unreal 4.27 Python 官方文档
如何在ue中使用python – PingCode
一、启动python插件你需要在Unreal Engine中启用Python插件。
打开Unreal Engine编辑器,进入项目。
选择“编辑”菜单,然后选择“插件”。
在插件窗口中,搜索“Python”。
启用“Python Editor Script Plugin”和“Sequencer Scripting”插件。
重新启动编辑器以使更改生效。
启用Python插件后,你就可以在Unreal Engine中使用Python脚本了。
二、执行pyhon脚本调成cmd模式
执行
py “O:\GR\GR_Thunk2\Tools\PbDelcare\RefreshVXCommon.py”
三、使用Python API
操作资产
你可以使用Python API来操作Unreal Engine中的资产,例 ...
UE 联机
前言UE 中网络系统是重要一个部分,其中包括网络预测更为重要。DS就需要基于此去处理部分信息。
零、开篇省流第一篇使用 关键字回忆
帧同步和状态同步,UE5的CS架构(如DS)是状态同步
Player角色枚举 ENetRole
RPC :[Reliable]、HasAuthority()检测宇宙是否权威、xxx_Implementation执行、xxx_Validate 校验
属性复制 : [Replicated]、[ReplicatedUsing = OnRep_xxx ] 、注册属性复制 GetLifetimeReplicatedProps()–[DOREPLIFETIME]
组件属性复制:CombatComponent->SetIsReplicated(true); 构造函数中SetIsReplicatedByDefault(true);
第二篇预测
客户端提前预测:Ammo的属性复制和AmmoNetSequence(预测变更子弹数)
服务器权威 对表 HitBox 回滚判定
写入对表:计算时间
DTime = STime - CTime
= (RspS ...

