UE4/5 开发面试题:Unreal
动态材质实例(MID)允许游戏期间使用脚本更改材质参数,实现材质在运行时变化,如模拟损坏效果或面部表情的不同皮肤纹理。
委托是一种泛型且类型安全的机制,用于在C++中调用成员函数。它允许动态绑定任意对象的成员函数,即使调用者不知对象类型。
委托的底层原理基于观察者模式,通过委托对象保存函数指针,实现成员函数的动态绑定与调用。
保持UObject对象不被自动GC垃圾回收的方法包括:使用AddToRoot()函数保护对象,通过UPROPERTY宏标记对象指针变量,使用FStreamableManager加载资源时设置bManageActiveHandle为true,以及使用FGCObjectScopeGuard。
智能指针解决循环引用问题,通过一方使用弱智能指针(TWeakPtr)来防止内存泄漏。
ParallelFor功能允许对for循环进行多线程处理,优化执行效率。
TMap基于数组的哈希表实现,具有高效查询和相对低效的添加、删除操作,采用快速排序进行排序。
法线存储在切线空间,而非模型空间,适用于非均匀缩放等变换,以保持法线方向的准确。
虚幻游戏中的主要线程包括游戏线程(GameThread)、渲染线程(RenderThread)和RHI线程(Render Hardware Interface Thread)。
游戏线程与渲染线程同步通过创建FNullGraphTask空任务,等待RenderThread完成执行。
CharacterMovementComponent通过加速度驱动速度,使用输入控制移动速度。
多线程TaskGraph提供并发机制,允许在指定线程中执行任务,并支持任务之间的依赖和等待。
泛光(Bloom)效果通过高斯模糊实现,结合多个不同半径的模糊进行优化。
轮廓描边效果可以采用两种方法:开启自定义深度缓存或通过UV偏移和法线向量计算实现。
蓝图连线比C++慢的原因在于节点间消耗一致,但节点运行效率不一,导致整体效率降低。
解决模型闪烁问题使用Pixel Depth Offset节点,实现共面不闪面的效果。
虚幻内使用PBR(基于物理的光照)模型实现逼真光照效果。
Slate中常用控件包括SHorizontalBox、SVerticalBox、SUniformGridPanel和SWrapBox。
反射支持UE4的动态功能,包括垃圾回收、序列化、网络复制和蓝图/C++通信。
结构体中不支持使用UFUNCTION(),UE4约定限制结构体仅包含数据结构。
UE4的垃圾回收采用标记-清扫方式,一次回收分为标记和清理两个阶段,以避免卡顿。
UE4中的容器包括TArray、TMap、TSet和TList。
游戏框架概念包括Character、Camera和Control,分别负责玩家行为、游戏视角和输入处理。
Unreal中使用的光线追踪方法,具体细节未详述。
多重随机标签