2025 Unity 网易社招面经(已OC)

本人背景:双非本科,泛cs专业,2022校招有幸加入某沪老牌游戏厂,校招的时候有UE4的TPS客户端项目经历,入职的是后端部门,但因为个人热爱客户端,后续工作内容围绕全栈进行,后误打误撞打开了战斗大门,从此一发不可收拾,太喜欢这战斗了,莫名其妙上头😲😀,因为是全栈,很容易就能接触前后端战斗代码,花了半年时间深入掌握

投递情况:前期瞄准了三四家3-5年的岗位试水,大多以年限不足简历挂,后续投递网易某部门,岗位为2年玩法战斗,一发入魂,顺利oc,时间线大约为四个工作日三面,offer七天内到账,因为jd很符合我的口味😍就没在推进其他公司流程了,来此还愿望

面试情况:主要以简历拷打,个人主要项目经历是gameplay设计,编辑器实现,以及战斗功能的维护和优化,主要技术栈是unity+C#+Lua

一面:
1. ECS和DOTS的区别?相比传统的代码设计又有什么优势体现?遇到过什么问题?
2. 帧同步和状态同步,如果你项目中的状态同步改为帧同步你会怎么实现?(以及一个相关细节业务的提问,这里为了防老东家定位就不便透露哈哈哈
3. 寻路算法的优化?从基础A*到JPS到RVO到KD-tree讲了个大概思路和一些具体的细节实现
4. 代码题:类似战旗,场景是矩阵地图,各个矩阵是有高度到,你只能高度相差1的移动,问两点是否能到达
5. 项目中屏蔽字校验工具的优化,询问了什么是贝叶斯,怎么做到的复杂度优化
6. lua战斗优化,主要涉及debug函数库中的sethook函数,根据业务环境编写,后端就分析各个战斗模块中函数的调用和性能分析,用算法和常见的lua优化进行修改,前端除了这部分,还有资源部分,进行一些内存性能到定位,unity自带的profile和lua的内存分析工具,这些网上都有框架提供
7. 询问其他优化,如ui中的一些视野剔除,相机剔除和组件对象池复用等部分
8. 公会战AOI视野优化的实现
9. 空间里有好几个圆,中心和半径,怎么判断两个点会不会被这些圆障碍阻挡到视野?也就是能不能相互看到
10. 玩家手机屏幕分辨率修改会对相机产生什么影响(唯一一个不知道的问题。。。
11. 玩家拿着武器,穿墙了怎么办
12. 玩家播放某个动作,需要某个身体部位对应到某个坐标上,怎么实现?
13. 业务题:我有多个武器,涉及品质和等级,玩家可以升级,对于玩家而言,评分最高的是品质优先然后同品质高等级优先,等级不得大于玩家等级,求一个排序方式,可以在玩家升级武器情况下,排序复杂度尽可能的低

二面:
1. 代码题:二维坐标里有好多个矩形,如何检测碰撞,如果这些矩形不和xy平行,又要怎么检测
2. 代码题:write do undo的实现
3. 遇到过的战斗不一致问题,怎么解决,战斗中随机数怎么实现?会有什么问题吗
4. 物理情况下子弹的实现,会遇到什么问题?
5. 场景里很多npc开着碰撞或范围检测,怎么优化?kd-tree的xy分范围
6. kd-tree的边界抖动问题,物体频繁来回穿越边界怎么办
7. 空间内射线检测的原理
8. 简历拷打,网络波动怎么办,行为预测,行为回滚
9. 简历拷打,KCP协议优化
10.简历拷打,AOI视野优化
11.简历拷打,循环列表实现

三面HR面,意向拷问,呜呜呜,战斗岗位,太想去了😭卑微求职

整体下来,面试挺有深度的,一二面的面试官都很好,下面有个老早时候入门学习时候的收藏,还是挺全面的,后续深入还是要自己去瞎看,系统学习

https://www.nowcoder.com/share/jump/27404740710207523058

最后感谢这三年内的众多同事,简直不能太棒了😘
#社招# #游戏# #游戏开发面经# #网易# #unity客户端#


全部评论
已收藏,,大佬好厉害,一年UI仔路过,一半以上都答不上来
4 回复 分享
发布于 04-01 11:51 未知
nb
1 回复 分享
发布于 04-07 12:45 广东
占个茅坑。收藏一下。
1 回复 分享
发布于 04-01 17:04 广东
去哪学这么详细啊佬
点赞 回复 分享
发布于 04-16 18:06 浙江

相关推荐

会员标识
04-17 20:20
已编辑
电子科技大学 算法工程师
发点面经希望能求求好运~4.7早面,两天后挂了,面了1h无手撕。面试官人还是不错的。另外面试官那边说在招的都是ue的项目,主要就问基础知识了(八股盛宴)自我介绍略。-----------1.说一下多态√(静态多态函数重载和模板,动态多态派生类和虚函数2.说一下虚函数怎么实现和调用√ (虚表,虚表指针)3.虚表什么时候初始化√(虚表编译时,虚表指针new的时候)4.多继承几个虚表指针,内存分布?√(子类继承了几个基类就有几个虚表,和对应的虚表指针)5.定义一个空的class,编译器默认会帮我生成哪些函数??(回答的是构造、析构、拷贝构造、)(---实际应该还有赋值运算符和两种取址运算符)6.默认生成的构造和析构是虚的吗?√(构造不是虚的,析构没有子类的话默认也不是虚的,但如果是有子类那父类必须得是虚的)7.刚刚提到默认生成的拷贝构造,那么它是一个深拷贝的实现还是浅拷贝实现??(没准备到,一开始说了浅,但是想到浅只是新指针指向,如果两个指向同一个资源,delete两次就坏了,于是说了深。这里面试官还引导我说一下深浅拷贝的概念。)(---实际默认实现是浅拷贝!!但确实也存在上面的那个隐患,所以需要人为的重载)8.说一下C++的内存分区,以及各个区的功能√9.静态成员变量,在那个分区?√ (静态存储区)10.函数内的静态变量或者CPP文件下的静态变量√(都是静态存储区,前者即使作用域消失也还会在内存中存在,只是没法访问;后者可以文件内访问,只是没法跨文件)11.那它们三的初始化的时机是一样的吗?√(C++中的类静态成员变量和cpp文件下的是main执行前,函数的局部静态变量是首次调用函数时。12.New和malloc的区别√13.什么场景使用new什么场景用malloc?(这里说了需要构造对象用new,需要分配内存给基本类型又不需要构造的时候用malloc14.New和Malloc分配的时候,释放时的方式?√(delete/free)15.Malloc申请内存的释放,可以只释放一部分吗?√(free我记得只能释放完整的内存吧)(---如果想动态调整倒是可以用realloc??这个不太清楚)16.指针引用区别√17.class里有三个int,用sizeof给这个class的引用和指针取值,他们的值是多少,一样的吗?√(不一样,引用就是class原大小12,指针就是4or8)18.指针变量所指向的地址不能改变,应该哪里加const?int * const19.内容不能改变呢?const int * (---其实还有int const * )20.四种类型转换,每个的作用√21.static_cast相比C语言用括号进行转换,好处是什么?X(只说了更安全会有类型检查……)(---实际还有,C语言只用于值类型,static_cast能用于指针、引用以及类)22.现在对两个无关的类型,用static_cast进行转换,会得到什么?√(说了编译时就会报错)23.两个无继承关系的类型,用dynamic_cast进行转换,会得到什么??(说了运行时报错)24.运行时报错的具体表现??(指针类型的转换失败,就会抛出nullptr,引用类型的异常,抛出bad_cast(---背倒是背了,但是答的时候没有注意大前提……无继承类型的话,是编译时报错……转换失败才是上面这两种……)25.智能指针说一下√26.shared_ptr作为函数的参数传递时,会增加引用计数吗?√(值传递会调用shared_ptr的拷贝构造,引用计数会加,但是引用传递就不会)27.如果是我用拷贝的方式来传递,他是在什么时候把加一给减掉了?√(函数执行完,局部变量生命周期结束时,拷贝的那个shared_ptr对象自己的析构调用时减128.Unique指针,可以写一个函数,它的返回值是unique指针吗?X(我说要分情况,如果一个函数里局部变量的unique指针,不能这样返回,如果全局的就可以)(---这里应该是完全没答到点上。函数返回值直接用unique_ptr是恰当的用法,临时对象直接通过移动语义传递独占所有权。)------数据结构篇-----29.说一下栈和队列,应用场景√(函数调用,回溯算法//BFS,FIFO策略)30.如果在C++里自己实现队列(不用STL),有那些方式?√(链表队列,数组用循环队列)31.用数组的方式来实现的缺点是什么??(会有空间的浪费,队列最大长度也有限)32.现在我把队列改造成一个带优先级的优先队列,我现在我向里边插入一个元素,它大概的流程是怎样的?X (这里当作成了OS里的那个多级队列,直接超级大爆,后面面试官甚至提醒了我堆排序也没唤起记忆)33.计算哈希值有哪些常用方法(说了MD5码,SHA256,简单的话就取模)34.遇到冲突怎么解决?√(链地址,开放地址法)35.链地址法怎样来解决哈希冲突。而且使用这种方法,最后查找的时候是怎样来查找?√(指针数组,取模后找对应槽位的链表进行遍历,顺便提了一下链地址如果长了,负载因子高了也需要动态扩容并调整哈希函数)36.用哈希表实现的容器?√37.红黑树相比于二叉平衡树的优点?√(只说了平衡的严格程度,插入和删除效率也更高,虽然同为O(logn)但红黑树所需要的旋转更少)-----根据项目问八股环节---------38.“从操作系统层面考虑序列化,中间大概发生那些流程,把内存的数据转换成硬盘中的数据?”X (文件IO忘了,只说了转换为流文件再写入磁盘)39.这个过程它会涉及到操作系统里边用户态和内核态的切换吗?X(一开始说了不能,爆了,下面面试官再问的时候才说能)40.用户态和内核态就是他设计出来的主要目的是什么?A:内核态可以访问调度各种资源数据,包括外围设备,用户态只能访问分配的资源。41.游戏的存档IO这一步,可以在主线程进行吗?他会不会导致游戏就是卡住了,比如你写的东西很多A:有可能42.那你会考虑怎么实现和解决?A:可以考虑协程43.我们先说协程,它本质上是开了一个新的线程,还是用其他的方式来实现?√(说了一下协程的原理)44.稍微发散一点,如果我现在很多数据量很大的需要写入到硬盘中,并不一定是游戏存档。你来写程序的话,会写一个多线程的方式的程序,还是写一个多进程的方式的程序更好一些。A:认为多线程好一些,会共享内存且线程切换开销小一些,但是要注意写入时的保护(感觉是一个开放性问题,还有什么可以说的吗?)45.那有哪些线程同步的方式?A:临界区,互斥锁,信号量46.假设我们用信号量的方式,简化一下,比如就两个线程,一个写的,一个读的,这个信号量大概是怎样来操作的?A:我说可以允许多个读线程并发,读与读之间可以不互斥,但写线程要和所有其他读写线程互斥(感觉答的不对口)47.UI相关有用到什么设计模式吗?A:我回答了UI管理器用了单例,然后一些其他对象触发UI逻辑更新时会用到观察者------没有手撕------反问问了面试官部门现在的工作内容?然后实习生进去一般是做什么?问了如果Unity转UE有什么建议还是说工作室会有什么指导?#牛客AI配图神器#
点赞 评论 收藏
分享
评论
7
87
分享

创作者周榜

更多
牛客网
牛客企业服务