腾云摘星UE客户端实习一面凉经
不清楚是不是秋招。HR直接加wx说要面试。猜测是我在鹅招聘官网投的,没关掉子公司推荐就被捞了。项目组是The Finals国服
部分问题问的有点深而且连续性很强,所以括号里贴出我的一部分答案。没括号的就是不会的。
讲了一会实习产出,对面的评价是很标准的商业项目实现
如何实现一个生命周期与GameMode一致的子系统
【GameMode基类里面维护一个SubsystemCollection。初始化里用反射获取,结束阶段再释放掉】
学过强化学习吗?知道怎么用强化学习驱动AI吗?
说一下UE的反射
【说了一下类型系统的组成与意义,UHT的行为。
.gen.h中的内容:一些默认函数的声明或者警用。与蓝图交互用的Thunk处理。
.gen.cpp中的内容:一些默认函数的默认实现。类型对象、Outer和Package构造注册。静态全局结构体变量收集并初始化信息,例如该类的Outer和Package的构造函数的函数指针、用类型萃取判断该类是否为抽象类以及成员函数的数量等杂七杂八信息】
既然C++和蓝图之间的交互需要thunk,UE反射的Thunk具体做了什么。从蓝图调用C++函数,中间的具体步骤是什么
CDO的生成怎么实现的看过吗
UE的GC怎么做的
【GC和TryGC的区别、四种避免GC的标记位和如何写入根集,从根集出发标记可达对象。最后释放不可达对象】
大世界场景下GC怎么优化?【簇和新老生代】除了这些以外还有呢?
如何使得UObject不会被UE的GC影响到
【一是AddToRoot。二是使用UPROPERTY宏让UHT注意到。三是让其被UE管理的UObject引用,例如Actor其实就不需要考虑被误GC】
换成原生C++类呢?
【我没太懂他到底要问什么,按道理说根本就不会参与到GC里去。但他后来又说一般是挂在单例下管理】
UE的属性同步怎么做的
【客户端和服务器的Connection->ActorChannel负责给Actor同步->其中RepState的Changlist维护了一个环形数组存储历史值(这里提了一嘴RepLayout,但我觉得没必要细说)。服务端的NetDriver会Tick执行历史值和当前值的对比,不同就会触发同步】
既然是每帧对比历史值,大量Actor的同步怎么优化
【一是可以用PushModel,由程序员根据需要主动同步。二是用ReplicationGraph,自定义同步策略】
那它们各自的应用场景是?看过ReplicationGraph的实现吗?
我看你之前有个小Demo用的还是原生的DS架构,但是和动画有关的网络同步,如果用DS架构都向服务器请求的话会受网络影响,这种情况该怎么办。
【用预测回滚】
用预测回滚的话,服务器和客户端还是会受网络影响出现延迟,会导致动画卡顿或者瞬间播放的问题。
【虚幻竞技场之前实现过一个延迟补偿机制】
用延迟补偿是吧,说一下。
【我的理解是在PlayerController和Character的运动方面添加对应的修正参数,例如允许的误差值、某一运动参数的历史缓存,使用这些参数来让一些判定更容易或者更难达成,进而缓解因为网络波动带来的表现问题】
那如果你来优化,你怎么做?
反问评价:没达到他们这个岗位应该有的技术认知
#面试问题记录#