以下是20道UE4(Unreal Engine 4)经典面试题及详细答案,涵盖引擎基础、蓝图、C++开发、渲染、性能优化等方面:
答案:
Actor是UE4中的一个对象实体,代表场景中的一个物体或逻辑单元,可以被放置在关卡中。Component是Actor的组成部分,负责实现具体功能,如渲染、碰撞、声音等。Actor像一个容器,Component像零部件。一般推荐:通用逻辑写在Actor,具体功能拆分到Component,便于复用和维护。
答案:
蓝图优点:可视化、开发效率高、易于原型设计和快速迭代;缺点:运行效率低,复杂逻辑难以维护。
C++优点:执行效率高、适合复杂逻辑、易于扩展;缺点:开发周期长、编译慢。
实际开发中,建议底层核心逻辑用C++实现,上层逻辑、关卡、UI等用蓝图实现。
答案:
Tick函数每帧调用一次,用于持续更新Actor/Component状态。Tick数量过多会影响性能。优化方法:
- 只在必要时启用Tick,能关则关(PrimaryActorTick.bCanEverTick = false)。
- 降低Tick频率(TickInterval)。
- 用定时器或事件替代Tick。
答案:
UE4使用标记-清除机制,自动回收未被引用的UObject。内存泄漏常见原因包括:
- 忘记UPROPERTY宏导致对象未被GC跟踪。
- 手动new分配的内存未释放。
- 循环引用。
答案:
反射系统允许在运行时获知和操作类、属性和方法,支持编辑器可见、蓝图交互、GC、序列化、网络同步等。常见用途:UPROPERTY、UFUNCTION、编辑器暴露、蓝图调用、网络同步。
答案:
UE4材质系统基于节点编辑,支持实时预览。PBR(物理基础渲染)是一种基于物理的渲染方法,使材质在各种光照条件下表现更真实(如金属度、粗糙度等参数)。
答案:
通过为Actor添加碰撞组件(如Box、Sphere、Capsule等)实现。常用类型:
- 简单碰撞(如Box、Sphere、Capsule)
- 复杂碰撞(基于网格的碰撞)
- 自定义碰撞通道(Collision Channel)
答案:
Delegate是一种类型安全的回调机制。可用于事件分发、UI交互、异步回调等。例如角色死亡通知、按钮点击响应等。分为单播(Single)和多播(Multicast)两种。
答案:
- 直接引用(如GetActorOfClass):简单直接,但耦合高。
- 事件派发(Event Dispatchers):适合松耦合通信。
- 接口(Blueprint Interface):适合多类统一处理。
- 通过GameMode/GameState/PlayerController等中转。
答案:
关卡流允许动态加载/卸载子关卡,减小内存占用,实现大世界无缝切换。常用于开放世界、分块加载、场景切换等。
答案:
采用客户端-服务器模型,属性用UPROPERTY(Replicated)同步,函数用UFUNCTION(Server/Client/NetMulticast)声明。只有Server有权修改被同步属性,Client只能接收。
### 12. UE4的动画蓝图(Anim Blueprint)与动画蒙太奇(Montage)的区别?
答案:
Anim Blueprint用于角色基础动画状态机(走、跑、跳等),逻辑清晰;Montage用于播放特定动画(攻击、受伤等),支持分段、插槽,适合复杂动画控制。
答案:
通过编辑器菜单 "Edit -> Plugins" 创建插件,支持代码、蓝图、资源等。常用于工具扩展、第三方SDK集成、复用功能模块等。
答案:
使用UE_LOG宏输出日志。可自定义日志类别(DECLARE_LOG_CATEGORY_EXTERN/MyLogCategory),在实现文件中定义(DEFINE_LOG_CATEGORY),输出时指定类别和级别(Log、Warning、Error)。
答案:
基本流程:顶点处理→光栅化→像素处理→后处理。
Forward渲染:每个物体逐光源渲染,适合少光源、透明物体;Deferred渲染:先输出GBuffer再统一光照,适合多光源场景,不适合透明物体。
答案:
- Profiler(性能分析器)
- Stat命令(如stat fps/stat unit/stat scenerendering)
- GPU Visualizer
- Unreal Insights
- 命令行参数(如 -statfile)
答案:
通过USaveGame派生类存储数据,SaveGameToSlot/LoadGameFromSlot实现读写。序列化关键数据到SaveGame对象中,支持蓝图和C++。
答案:
在Project Settings中设置Input Mapping(Action/Axis),在Actor或Pawn中重载相关响应函数(如SetupPlayerInputComponent),绑定输入事件。底层通过InputComponent分发。
答案:
UE4项目基于模块(Module)组织,支持独立编译、热重载。通过编辑.Build.cs文件添加/管理模块,代码结构上以Module为单位划分。
答案:
可用for循环加SpawnActor批量生成,或用Object Pooling(对象池)优化重复生成/销毁。管理可用数组或TMap保存指针,按需激活/回收。
未经 qmjianli.com 同意,不得转载或采集本站的文章。