面经-ue知识
本文最后更新于:2026年3月26日 晚上
永星
ue常用的反射宏有哪些?绑定的时候有没有踩什么坑?
native和一个什么没听清有什么区别
Uboject的生命周期?会遇到什么函数
TObject和SoftObject的区别?垃圾回收有什么区别这两个
硬引用(Hard Reference)
定义:
直接指针引用,如 UObject、UClass
资源在包含它的对象加载时会被自动加载到内存
1 | |
优点:
使用简单,直接访问
自动管理,无需手动加载
类型安全,编译时检查
缺点:
内存占用:资源会立即加载
加载时间:形成依赖链,导致大量资源一起加载
循环依赖风险:可能导致资源无法卸载
使用场景:
核心资源,必须立即可用
小资源,内存占用可接受
频繁使用的资源
软引用
定义:
只存储资源路径字符串,不立即加载资源
使用 TSoftObjectPtr
、TSoftClassPtr 或 FSoftObjectPath
1 | |
优点:
延迟加载:只在需要时加载
减少内存占用:不立即加载到内存
加快启动速度:避免加载不必要的资源
更好的资源管理:可以控制加载时机
缺点:
需要手动加载:代码更复杂
可能为空:需要检查资源是否加载成功
异步加载:需要处理回调
使用场景:
可选资源:可能不使用的资源
大型资源:纹理、模型等
按需加载:根据游戏状态动态加载
减少启动时间:延迟加载非关键资源
GC区别
硬引用:阻止 GC,对象会一直保留在内存中
软引用:不阻止 GC,对象可以被回收,需要时重新加载
弱引用:不阻止 GC,用于避免循环引用
对象销毁后行为
FSoftObjectPtr 在一定时间内仍然可以访问已销毁的对象,直到垃圾回收期间。FWeakObjectPtr 会自动失效(置为空指针),不会访问到已销毁的对象。
UMG和SlateUI的区别?
UMG是蓝图,可以绑脚本
Slateui更底层,就是编辑器那些的ui
手柄的组合键是什么做的?
动态修改InputSetting里的ActionMapping按下技能组合键时,把原先 ”X键映射Attack” 删掉,新增一条 ”X键映射Skill1”松开技能组合键时,把 ”X键映射Skill1” 删掉,重新加入 ”X键映射Attack”
这样做有个问题,有可能出现时序问题

解决办法:加一道工序,如果正在按下,就松开的时候再替换,绑一个回调

思路就是修饰键
组合键通常需要一个“修饰键”(如 GamepadUseSkill)作为触发条件
按下修饰键时,临时改变其他按键的行为
释放修饰键时,恢复原始映射
这样可以实现:
单独按 y:执行原始功能
按住 x + 按 y:执行组合功能(如技能1)
按住 x + 按其他键:执行对应的组合功能
这是典型的手柄组合键实现方式,类似键盘的 Ctrl/Cmd + 其他键的组合。
enhance输入什么的
增强输入:
https://dev.epicgames.com/documentation/zh-cn/unreal-engine/enhanced-input-in-unreal-engine
IMC Mapping和Action的区别是什么
按键响应的顺序是什么?

网易
实现一个队列,要求不重复怎么搞?
listview怎么优化的?
怎么做一个eventmanager?
恢复这个任务怎么恢复的?会不会影响场景中的东西?
深蓝
植被随机变稀疏是怎么搞得?
样条曲线实现逻辑
UobjectGc的逻辑?什么时候会被gc?
节点怎么跳到任务?
萨罗斯
Ue的game play框架?Ds、基础的类分别有什么用?
C++怎么到lua?lua怎么到C++?
反射机制如果暴露给蓝图的?
自研引擎和ue有啥区别?
TCPheUDP区别?射击游戏一般用哪种?PUBG用了哪种?UE用的哪种?
UDP如何实现握手?几种方式?可靠性如何保证?
GC
AActor生命周期
- PostLoad/PostActorCreated - 执行构建 Actor 所需的任何设置。PostLoad 用于序列化 Actor,PostActorCreated 用于生成 Actor。
- AActor::OnConstruction - Actor 的构造函数,蓝图 Actor 在此函数中创建其组件并初始化蓝图变量。
- AActor::PreInitializeComponents - 在对 Actor 的组件调用 InitializeComponent 之前调用
- UActorComponent::InitializeComponent - actor 的 components 数组中的每个组件都会被调用初始化函数(如果该组件的 bWantsInitializeComponent 为 true)。
- AActor::PostInitializeComponents - 在 Actor 的组件初始化完成后调用
- Actor::BeginPlay - 关卡开始时调用
UE 动画系统框架介绍及使用 - TurBo强的文章 - 知乎
Two Bone IK - silvergp的文章 - 知乎
其实很简单,就是想象最后是一个三角形,所以可以这样就知道了三个边的长度(因为ac=at),然后就可以求出角的大小,角的大小就是bat-bac,然后就可以旋转过去,这里用个旋转矩阵就可以了,然后就又可以求出其他的了

UE 动画系统框架源码解析 - TurBo强的文章 - 知乎
这个文章还介绍了许多大佬的文章
Motion Mathcing
Motion Matching 中的代码驱动移动和动画驱动移动 - 小木子的文章 - 知乎
GC优化方法?
这篇有优化相关的介绍
通常GC会引起问题都是在LevelStreaming的时候,不过如果你在代码中申请了大规模的UObject,在不再使用的时候也不删除。或者频繁而无意义的调用ForceGC,自然也可能会造成性能问题。
为了避免LevelStreaming造成的GC瞬间成本,可以通过缩小细分关卡的规模来进行。
这样的话在进行角色的移动时,就可以形成小规模的载入和移除,而不是一次性的大规模变更。
设置这个可以减少遍历成本

Cluster