腾讯游戏开发实习面试经验分享,可能有特例情况的存在,欢迎大佬们补充!
腾讯游戏开发实习面试基本都在4轮以上:笔试——现场/电话面试——HR面试
1、如果面试的项目组是用Unity开发的,会简单询问简历中Unity的项目;使用UE系列开发的项目组同理。
2、物体阴影的演算与效果实现。
3、Phong光照模型,以及Blinn-Phong的优点和缺点。
4、光栅化相关问题。
5、C++多态实现的原理?
6、移动语义的好处是什么?
7、如何在Lamda中传值or传引用?
8、多线程编程的经验。
9、协程异步移动相关问题。
10、shadowMap可能出现的问题。
11、移动端的渲染管线与主机的的区别。
12、vector的push_back的时间复杂度。
13、组合和继承的区别有什么各自优缺点。
14、实现骨骼蒙皮动画的底层。
15、渲染管线中的坐标变换流程。
16、透视除法的意义。
17、投影矩阵的推导过程。
18、用递归实现链表的大数加法。
1. Unity Set Pass Call是什么?
Set Pass Call 是 Unity 引擎在绘制物体时,将对应的 Shader 和相关参数装载到 GPU 流水线上的操作。每次切换 Shader 时,都会触发 Set Pass Call,这个过程会带来一定的性能开销。
为了优化性能,应该尽量减少 Shader 的切换,使用统一的 Shader 并缓存常用的 Shader 到内存中,这样可以减少 Set Pass Call 的频率,提升渲染效率。
2. Unity DrawCall是什么?
DrawCall 是 Unity 引擎在绘制场景时,将物体的渲染指令提交给 GPU 的过程。每一次 DrawCall 都代表着一次提交。场景中物体越多,提交次数就越多,DrawCall 数量就越大。
3. 降低DrawCall对性能提升的意义是什么?
降低 DrawCall 的数量,可以减少 CPU 向 GPU 提交数据的次数,这样能减少性能开销,提升整体渲染效率。减少 DrawCall 数量可以让 GPU 一次性处理更多的渲染任务,充分发挥其性能潜力,尤其在移动设备上,降低 DrawCall 是优化性能的关键。
4. Unity 是单线程还是多线程的?
Unity 引擎本身是多线程的,但大部分开发工作是在主线程(Main Thread)中进行的。Unity 内部有两个主要线程:主线程负责业务逻辑、物理引擎、Mono 代码等,而渲染线程(Render Thread)负责将渲染数据提交给 GPU。
也可以自行使用多线程来处理一些独立的任务,比如网络通信、数据处理等,但要注意,Unity 中大部分 API 只能在主线程中调用。
5. Unity有哪些合批方式可以降低DrawCall?
Unity 提供了三种主要的合批方式来降低 DrawCall 数量:
6. Unity 如何分析内存占用?
要分析 Unity 项目的内存占用,可以使用 Unity 的 Profiler 工具。Profiler 可以详细显示各个模块的内存使用情况,找出内存消耗的热点,并针对性地进行优化。
7. Unity 如何分析性能热点?
通过 Unity 的 Profiler 工具,可以分析项目中的性能瓶颈。Profiler 可以显示函数调用的时间占比、调用次数等信息,识别和优化性能热点,提升项目的运行效率。
8. Unity如何查看当前场景的DrawCall?
要查看当前场景的 DrawCall 数量,可以使用 Unity 编辑器中的 Stats 面板或 Profiler 工具。Stats 面板会显示当前场景的 DrawCall 数量,而 Profiler 则可以更详细地分析 DrawCall 的来源和性能影响。
1. Unity项目开发中程序如何愉快的与策划沟通?
在游戏开发中,策划常常希望能方便地调整游戏中的数值、规则,并能立即看到修改的效果,而不需要每次都麻烦程序员。为了满足策划的需求,可以提供一些工具,比如:
2. Unity项目开发如何避免多人开发时的提交冲突?
多人开发Unity项目时,提交代码和资源时可能会发生冲突,特别是在多人同时修改同一场景或资源的情况下。为了减少冲突和方便解决冲突,可以采取以下措施:
代码冲突: 代码文件是文本格式,冲突较容易解决。使用版本管理工具(如Git)进行代码合并,大多数情况下工具能自动处理冲突,实在不行,人工介入解决也相对简单。
场景冲突: 场景文件不是纯文本,合并冲突时较为麻烦。解决的办法是尽量避免多人同时修改同一场景。可以将场景中的内容分成多个预制体,每个人负责一个预制体,这样即使需要修改,同一时间也是在不同的预制体上工作,减少了冲突的机会。
避免直接挂载代码: 不要直接将代码挂载在场景节点上,这样会导致合并时难以解决的冲突。所有逻辑都应通过代码控制,尽量减少与场景结构的绑定。