面向阅读者:unity或c#面试者
Q:Unity的Mono方法执行顺序?
Q:Update和FixedUpdate的区别,timescale和dataltime的使用和对前者的影响
A:https://blog.csdn.net/u014528558/article/details/83022461
Q:协程是什么,如何一帧后执行,如何跳出,如何停止,与C#线程区别?
Q:问看到物体前后的所有影响
A:camera depth → sorting layer → order in layer → shader渲染列队(所有数值越大越后渲染,显示越靠前)→坐标
Q:ui canvas是啥 三种模式区别
A:https://blog.csdn.net/qq_42351033/article/details/85208404
Q:NGUI和UGUI中,两个UI间夹着一个粒子特效是怎么实现的
A:NGUI:设置shader的renderQueue UGUI:设置sortingOrder
Q:如何做个拼图仔
Q:背包界面如何实现?
移动
Q:旋转 和 移动函数?
物理
Q:Unity3d中的碰撞器和触发器的区别?
Q:发生碰撞的条件;如何使用物理力;
动画
Q:animator和animation区别
A:两者都是控制动画播放的
Animation控制一个动画播放的各类方法和数据(当然你可以通过修改目标动画进行动画切换)
Animator则可以实现控制多个动画的播放,切换,叠加等一级对骨骼动画控制等更复杂的效果,是一个动画状态机
除却必要的动画文件,还会生成一个.controller结尾的文件,也因此占内存比Animation更大
AI
Q:行为树是什么,状态机是什么,优劣?
Q:导航方式有几种,算法原理分别是什么,Unity导航是怎样。
A:A*、网格导航、waypoint ; unity也许使用了网格导航+A*
Q:技能的做法,有什么缺点
A:技能分类:直接技能和分段(A前摇B持续C结束)技能。
技能实现:使用动画标签做常用的逻辑:如子弹、位移、制造打击点;缺点:不如配表直观、标签修改较麻烦
特殊技能:则映射脚本做成 通过配置名字 然后GetType然后GetConstructor.Invoke获取脚本。
Q:AssetBundle打包函数,unload方法中boolean参数有什么用,压缩格式
Q:简述Assetbundle的加载过程与注意事项
Q:贴图的压缩格式
A:导入即根据配置选择格式,
https://blog.csdn.net/qq_26900671/article/details/86571099
https://blog.csdn.net/plaxbsga/article/details/64440848
Q:Unity提供了几种光源,分别是什么
Q:渲染流程
A:是指在显示器上为了显示出图像而经过的一系列必要操作。 渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。主要步骤有:
本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化
https://gameinstitute.qq.com/community/detail/124740
Q:Unity shader中用什么语言;Lighting Culling ZTest Zwrite Fog AlphaTest Blend Offset ColorMask分别代表什么
Q:阴影的消耗,为什么?
Q:LightMap?
A:就是指在三维软件里实现打好光,然后渲染把场景各表面的光照输出到贴图上,最后又通过引擎贴到场景上,这样就使物体有了光照的感觉。
Q:伤害弹出数字的制作
A:1.sprite(会多对象) 2.mesh 设置UV(单对象,有计算消耗) 3.Texture Get/setPixel虽然减少对象 但是增加很大计算)
Q:问子弹时间实现 ,遇到的难题 子弹时间的做法 从timescale到池改变速度
A:https://mp.csdn.net/postedit/83022461
Q:Spine2d内部结构是怎样的?如何实现换装?
A:https://mp.csdn.net/postedit/82697910
Q:横版场景地图块的加载的方案
A:只加载显示周围房间
Q:AB管理方案
Q:怪物放服务器如何导航
Q:TL会遇到什么问题
Q:Android平台防止反编译。有什么好的解决方案?
A:资源商量里面有这种解决方案
Q:如何真正的销毁asset
A:使其引用数为0时调用Resources.UnloadUnusedAssets(),Resources.UnloadUnusedAssets()会真正释放内存及显存,但此接口尽量不要频繁调用,因为会有较大的性能开销。
Q:UI内存大
A:动态打图集
Q:什么是DrawCall,DrawCall是CPU消耗还是GPU,DrawCall和batches有什么区别,如何优化DrawCall?
A:https://blog.csdn.net/Wei_Yuan_2012/article/details/88677172
Q:场景有什么合批技巧,为什么能合批?
Q:为什么不能合批
A:https://blog.csdn.net/weixin_34062469/article/details/89580788?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
Q:有蒙皮怎么合成网格
A:Mesh.CombineMeshes()
Q:对于制作2D游戏。经常会生成多个物件,如子弹,或者方格地图格子等。采用dynamic batch似乎不能很好的合并。这个要用什么方法优化dc吗?
A:可以用pool manager
Q:UGUI优化上有什么好的方法。UGUI有哪些降低DrawCall的技巧
A:drawcall,顶点数,三角面,合批 UGUI的优化请将重点放在drawcall合批和顶点重建上,比较常用的方法有:动静分离,有很多ui不需要输入事件时,可以关闭事件检测。
Q:加载卡顿怎么办
A:测试消耗、使用预加载、异步加载、分帧加载、拆分加载。
Q:Shader预加载,收集会有什么问题?
A:https://www.cnblogs.com/rexzhao/p/7884905.html、
Q:MipMap、LOD
A:MipMap、LOD
Q:发热
A:把帧数降到30帧应该会好很多,一般是CPU和GPU占用都太高。60帧一般用不到,但是也要看你的游戏类型,比如动作类的游戏60帧会效果好很多。
还有一种可能性是发生了垃圾回收,可以用UnityPofiler诊断是否有内存一直分配的情况。如果有,最好采用对象池等机制避免内存一直分配导致垃圾回收。
另外手机发热问题的原因很多,主要就是把CPU和GPU的使用率降下来。比如CPU查看一下热点函数,进行相应优化。GPU方面可以,可以检查Draw call,填充率,顶点数是否过多、overdraw等
Q:脚本优化
A:这里简单列举几条: 1.addComponent会造成gc alloc 2.physics.raycast会造成gc alloc,建议使用无gc alloc的版本 3.setParent尽量少调用,对于有mesh collider的物体,更是不建议调用 4.使用数组的数组,而不是多维数组 5.对于transform的修改尽量减少 6.对于有大批量物体的游戏,注意从native层调用mono脚本的开销,比如update的开销
Q:物理碰撞
A:物理系统,一般的2d碰撞检测不会有太大性能问题。可以检查下Layer Collision Matrix的设置, 把不同的的碰撞体分类, 避免多余的碰撞检测。如果要自己实现Box , Circle等形状的碰撞检测,也是可以的。
Q:粒子
A:粒子特效如果太多,可以适当减少。
Q:Occlusion Culling
A:https://gameinstitute.qq.com/community/detail/119430
Q:渲染消耗点
A:灯光、阴影、抗锯齿、drawcall
Q:移动开发的优化工具除了unity profiler和xcode上的instruments, 还有什么其他工具吗?有没有代码级别的优化工具?
A:除了常规的Unity profiler 和 instrument,
还有以下一些工具推荐: Memory profiler, 查看内存 NSight, 查看GPU Unity Engine Analyzer, 代码静态分析工具
Q:在移动端的性能调试过程中,怎么确定是cpu负载过高还是gpu负载过高?因为在Profile中是看不到gpu的耗时的
A:xcode可以查看cpu的gpu的占用,gpu还可以看出vs和ps占用比,请使用xcode调试。UWA可以出详细报告。
Q:性能消耗测试
A:C# - StopWatch | Unity - Profiler.BeginSample/EndSample
Q:栈堆区别
Q:static
A:https://www.cnblogs.com/lycb/p/11273772.html
Q:类和结构区别
A:https://www.cnblogs.com/vaevvaev/p/8466121.html
Q:构造函数和析构函数是什么
A:https://www.cnblogs.com/AmbitionBoy/p/11884697.html
Q:接口interface、抽象函数abstract和虚函数virtual
A:https://www.cnblogs.com/staid/archive/2010/06/23/1763437.html
https://www.cnblogs.com/stgp/p/6233359.html
Q:数组,ArrayList和List区别;数组和字典异同
A:https://www.cnblogs.com/mabingxue/p/9176324.html
Q:string 和 StringBuilder异同
A:https://www.cnblogs.com/Fflyqaq/p/11756111.html
Q:C# == 与 Equal
A:https://www.cnblogs.com/chen0720/p/3209398.html
Q:什么是反射;C#如何调用外部动态链接库
Q:线程与协程
A:https://blog.csdn.net/fadbgfnbxb/article/details/88787361
Q:ref out区别
Q:GC是什么?具体机制是怎样?它是怎么知道哪些对象可以被回收的?
A:https://www.jianshu.com/p/53439af1eb00
Q:委托是什么,事件是委托吗
A:https://www.cnblogs.com/akwwl/p/3232679.html
Q:Func,Action,delegate区别
A:http://www.cnblogs.com/akwwl/p/3232679.html
Q:如何删除指定的部分List
A:倒叙for循环删除
Q: "<<" 和 ">>" 是什么 value << index
A:https://blog.csdn.net/u014528558/article/details/105183368
数据结构
Q:排序有哪些 复杂程度 以及算法是否稳定?
A:https://www.cnblogs.com/hokky/p/8529042.html
Q:List和Dictionary,增加,插入,删除的时间复杂度
A:https://www.cnblogs.com/wccfsdn/p/11945454.html
Q:设计一张哈希表,如何解决哈希冲突
相交判断
Q:判断线段相交,射线和四边形碰撞是否相交
A:https://www.cnblogs.com/TangMoon/archive/2017/09/29/7611115.html?tdsourcetag=s_pctim_aiomsg
Q:两个四边形是否相交(给四边形中间点和长宽)
A:https://blog.csdn.net/yahohi/article/details/7927158
Q:目标是否在视野范围内
A:1.与目标距离适合 2.目标向量与自身方向法向量的夹角适合
Q:点是否在扇形内,线段是否与椎体相交
A:https://www.geometrictools.com/Documentation/IntersectionLineCone.pdf
运动
Q:移动相关公式,运动给一段线路,初速度为0,然后匀速运动,然后停止,求加速度路程时间;匀速路程时间;和减速路程时间;
A:加速度 a=v/t 路程 ①s=vt ②s=v0t + ½at^ 自由落体 h = ½gt^
Q:问如果碰撞的运动判断超过了碰撞体
A:射线长度和运动下个位置挂钩
计算
Q:任意一条曲线,如何知道两点间曲线长度
Q:祖玛的球回旋运动公式
Q:变量有哪些?
A:nil bool string number function thread table
Q:pairs和ipair区别 for i=1,n do和for ipairs区别?
A:https://blog.51cto.com/rangercyh/1032925
for k,v in pairs(tbtest) do ----- key的hash值排列的顺序来遍历
ipairs --------- 从1开始,ipairs只会从1开始按连续的key顺序遍历到key不连续为止。
for i=1, #(tbtest) do -------- 从1开始,获取table的长度
Q:元表
Q:newindex
Q:闭包是什么
A:闭包就是能够读取其他函数内部变量的函数。 https://baike.baidu.com/item/%E9%97%AD%E5%8C%85/10908873
Q:table是怎么实现既有List特性又有Dictionary特性的?
Q:帧同步
A:https://blog.csdn.net/u014528558/article/details/103832705
Q:状态同步
Q:帧同步与状态同步的优劣对比
Q:TCP和UDP的区别
Q:UDP如何保证消息送达?在网络较差时如何处理
Q:TCP滑动窗口
Q:讲TCP、UDP和HTTP关系的
A:TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层中有TCP协议与UDP协议。
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。Q:网络信息的信息池
Q:Protobuf的结构是怎样的?怎么实现高压缩率(TODO:表述有问题,待修正)
A:Protobuf结构是Tag-Length-Value
Q:设计模式有哪些? 写出工厂模式、单例模式 问ai和工厂 觉得不是工厂(工厂模式三种了解一下)
A:工厂模式https://www.runoob.com/design-pattern/factory-pattern.html
Q:ECS框架,优点
A:entity component system ①解耦 ②内存cache
Q:MVC框架
A:https://baike.baidu.com/item/MVC%E6%A1%86%E6%9E%B6/9241230?fr=aladdin
Q:ToLua框架,如何使用
Q:ET框架
Q:D3D渲染
A:管线:物体空间->世界空间->观察空间->裁剪空间->屏幕空间
流程:
Q:SDK如何使用
Q:生命周期
Q:回调方法描述
Q:生命周期
-----------------------------------------------------------------------------------------------
说一下面试流程,先简短的自我介绍,然后大公司基本上都是问简历上的内容实现方案的高度和深度,也可能会问一下unity基础、C#基础,中小公司可能会先给笔试甚至机试。
比较好的面试官有一步步的引导解题和给予一定反馈。
对于求职,最好有专研某个方向,能突出自己能力的亮点,但也要有相应的基础。
也有些面试总会问到很多,也许也是因为公司的期望,期望员工本就能独立完成所有,也有自己的强项;而我们要做到的甚至是不可替代。
面试也是一次试炼,面试完可以多做总结。