前言
持续更新中...
面向阅读者:unity面试者
阅读提示:一般面试中,不会问以下所有类型的问题,例如你选择做ui才需要回答UGUI分类的问题
Unity基础
Q:Unity的Mono方法执行顺序?
A:事件函数的执行顺序 - Unity 手册
Q:Update和FixedUpdate的区别,timescale和dataltime的使用和对前者的影响
A:【Unity】子弹时间timeScale减少对update,fixupdate,dealtime和碰撞检测的影响_PA_的博客-CSDN博客_dealtime
Q:问看到物体前后的所有影响
A:camera depth → sorting layer → order in layer → shader渲染列队(所有数值越大越后渲染,显示越靠前)→坐标
Q:碰撞的触发条件是什么
Q:协程是如何退出的
Q:物理的消耗一般在哪
A:1.collider 2.rigidbody 3.ray
Q:Mono和il2cpp是什么
A:介绍(点我) 、 详解(点我)
导入格式
Q:meta?
A:记录guid和导入设置
Q:贴图的压缩格式
A:选择格式+配置:unity 贴图格式及压缩后的图片像素比较_进击的鸭嘴兽的博客-CSDN博客 → 现ASTC
内存大小:https://blog.csdn.net/plaxbsga/article/details/64440848
Q:模型
Q:动画
打包、热更
Q:如何打AB包,如何处理依赖,如何分包?
Q:打AB用什么压缩格式 有什么好处
Q:热更流程是如何
资源加载
Q:加载流程是如何
Q:AssetBundle.unload方法中boolean参数有什么用
Q:Unity如何加载卸载资源
A:【Unity】Asset资源加载详解_PA_的博客-CSDN博客_unity加载asset
Q:加载慢的原因?怎么办?
A:NGUI研究院之为什么打开界面太慢(十三) | 雨松MOMO程序研究院
A:测试消耗、使用预加载、异步加载、分帧加载、拆分加载、分帧/异步实例化。减少挂在上面的GO和Scripts。
UGUI
Q:ui canvas是啥 三种模式区别
A:【Unity3D 教程系列第 13 篇】UGUI 中 Canvas 下三种渲染模式的区别_Allen Su的博客-CSDN博客
Q:NGUI和UGUI中,两个UI间夹着一个粒子特效是怎么实现的
A:NGUI:设置shader的renderQueue UGUI:设置sortingOrder
Q:背包界面如何实现?
移动
Q:物体如何旋转和移动函数?
Q:角色如何移动和旋转
Q:Unity3d中的碰撞器和触发器的区别?
Q:发生碰撞的条件?
A:如果使用Physics.Overlap则只需要Collider,OnTriggerXXX、OnColliderXX和物理碰撞需要其中一个具有RigidBody。
AI
Q:行为树是什么,状态机是什么,优劣?行为树优化?
A:【Unity】行为树与状态机,技能系统做法_PA_的博客-CSDN博客_unity状态机和行为树
Q:Unity导航使用流程?
A:【Unity】Unity导航Navigation和NavMeshComponents使用_PA_的博客-CSDN博客
Q:导航方式有几种,算法原理分别是什么,Unity导航是怎样。
A:waypoint、A*、网格导航; unity也许使用了网格导航+A*
Q:导航看过源码吗?
A:没看过
Q:A*是啥?结果是最优的吗?如何优化?
Q:怪物放服务器如何计算、如何导航?
战斗
Q:伤害弹出数字的制作
A:1.sprite(最优,会多对象需配合池和空间转换使用) 2.UI Text原理不清楚 3.mesh(单对象,有计算消耗) 4.Texture Get/SetPixel虽然减少对象 但是增加很大计算)
Q:技能、子弹检测碰撞
A:Physics.各种形状; Physics.Overlap
Q:Timeline有哪些坑
Unity优化
性能
Q:游戏卡顿怎么办
Q:发热怎么办
A:(来自Unity官方)把帧数降到30帧应该会好很多,一般是CPU和GPU占用都太高。60帧一般用不到,但是也要看你的游戏类型,比如动作类的游戏60帧会效果好很多。
还有一种可能性是发生了垃圾回收,可以用UnityPofiler诊断是否有内存一直分配的情况。如果有,最好采用对象池等机制避免内存一直分配导致垃圾回收。
另外手机发热问题的原因很多,主要就是把CPU和GPU的使用率降下来。比如CPU查看一下热点函数,进行相应优化。GPU方面可以,可以检查Draw call,填充率,顶点数是否过多、overdraw等
A:代码效率 使用UWA查看耗时高的函数
A:渲染效率 共同-ui刷新率降低、降低DC 低端机处理:后效和光照直接不要,特效做低配,分配率降低,帧数上限降低,
Q:脚本如何优化
A:(来自Unity官方)这里简单列举几条:
- addComponent会造成gc alloc
- physics.raycast会造成gc alloc,建议使用无gc alloc的版本
- SetParent尽量少调用,对于有mesh collider的物体,更是不建议调用
- 使用数组的数组,而不是多维数组
- 对于transform的修改尽量减少
- 对于有大批量物体的游戏,注意从native层调用mono脚本的开销,比如update的开销
Q:物理碰撞如何优化
A: 物理系统,一般的2d碰撞检测不会有太大性能问题。
可以检查下Layer Collision Matrix的设置, 把不同的的碰撞体分类, 避免多余的碰撞检测。
如果要自己实现Box , Circle等形状的碰撞检测,也是可以的。
Q:粒子特效
A:1.粒子特效如果太多,可以适当减少。2.尽量减少粒子的面积,面积越大就会越卡。 3.最好不要使用Alfa Test 4.检查拖尾、SkinMeshRenderer、超过300面
Q:什么是MipMap、LOD
A:MipMap:Mipmap 纹理使 GPU 能够为较小的三角形使用较低分辨率的纹理。这一点类似于纹理压缩可以帮助限制 GPU 渲染时传输的纹理数据量。
LOD
甚至相机剔除距离和Camera.layerCullDistances
图形与优化
Q:渲染瓶颈
A:(来看自官方) Graphics performance fundamentals - Unity 手册
Q:优化方式
A:关于Unity中渲染的优化 关于Unity中渲染的优化_zebintang的博客-CSDN博客
Q:什么是DrawCall?DrawCall是CPU消耗还是GPU高了有什么影响?DrawCall和batches有什么区别?
A:顾名思义Draw绘制,call,即调用cpu调用底层图形渲染接口命令gpu进行一次渲染操作
A:drawcall高了cpu会把大量的时间花费在搜集发送给gpu的信息上,造成cpu过载。
A:区别 - Batch, Draw Call, Setpass Call - 知乎 https://blog.csdn.net/Wei_Yuan_2012/article/details/88677172
Q:场景如何降低DrawCall?
A:降低drawcall一般是通过批处理的方法,unity提供了
- Static Batching 静态合批的原理即化整为零,将多个场景物体预先合成一个大的物体进行绘制,unity5的实现就是整合成一个大的vbo,而不整合IBO,一次性提交vbo给gpu,然后并不是把整个vbo都绘制,而是每次需要绘制其中某个某些物体时改变IBO,选择大vbo上的某一段进行绘制。静态合批可以将多个小物体的绘制合并成一个大物体的绘制,减少对渲染状态的改变,它一次并行绘制多个物体,理论上是最快的绘制方法,不过最大的缺点是因为合成新的大vbo需要耗费额外的大量内存,同时不能渲染动态物体,因为合并vbo的时候已经确定顶点数据了,顶点数据不能更改(例如unity5对LOD合批的实现也是讲所有层次的lod都预先合并进去),另外一个vbo的大小是有限制的,如果物体数量过多,也会被拆成多个绘制。(tzy那我觉得静态合批对比动态合批的优点就是vbo的合并是提前计算好的 不过也增加了磁盘和内存的占用 多材质依然会多次dc 2018测试的时候不能很好的几个材质就几个dc 换2019就又好了)
- Dynamic Batching 动态批处理 可以解决对顶点数据有变化的物体的合批,它动态的合并vbo进行提交,组建vbo的时间有消耗,为了减少这个消耗,unity对动态合批的vbo大小有限制,以致于很小顶点数的物体才有可能被动态合批注意顶点面数,缩放,shaderpass,光照问题(这个是Unity做的 相对静态合批可以把动态物体也进行CPU计算合批 但也会增加CPU消耗)
- GPU instancing(在材质上勾选,合并相同材质的模型)(和动态区别?)这是最新渲染api提供的一种技术,如果绘制1000个物体,它将一个模型的vbo提交给一次给显卡,至于1000个物体不同的位置,状态,颜色等等将他们整合成一个per instance attribute的buffer给gpu,在显卡上区别绘制,它大大减少提交次数,它在不同平台的实现有差异,例如gles是将per instance attribute也当成一个vbo提交,然后gles3.0支持一种per instance步进读取的vbo特性,来实现不同的instance得到不同的顶点数据,这种技术对于绘制大量的相同模型的物体由于有硬件实现,所以效率最高,最为灵活,避免合批的内存浪费,并且原则上可以做gpu skinning来实现骨骼动画的instancing。
这种方式相比static和dynamic节约显存,又相比dynamic节约CPU开销。但是相比这两种批次合并方案,会略微给GPU带来一定的计算压力。但这种压力通常可以忽略不计。限制是必须相同材质相同物体,但是不同物体的材质上的参数可以不同。
Q:为什么可以动态合批 为什么不能动态合批
A:Unity做的?不能合批的情况
Q:有哪些剔除?发生在什么阶段
A:
CPU - camera视椎体剔除
CPU - 遮挡剔除OcclusionCulling 静态
GPU - 裁剪Clipping
GPU - 背面剔除(shader Cull指令开启关闭)
GPU - 深度剔除
不同几种剔除(Culling)在渲染流程中的使用总结_鹅厂程序小哥的博客-CSDN博客
Q:静态合批是否会剔除,为什么可以
A:连续内存Index决定
Q:UGUI如何降低DrawCall和优化?
A:使用frame debug查看打断合批的问题;查看drawcall,顶点数(一般字体不多没问题),三角面,合批
UGUI的优化请将重点放在drawcall合批和顶点重建上,比较常用的方法有:动静分离
有很多ui不需要输入事件时,可以关闭事件检测;
注意ui顺序与图集,尽量不使用Mask(因为2个材质 这是mask实现原理)会打断合批
Q:Shader会吗?
A:不会
Q:有蒙皮怎么合成网格
A:【游戏系统】(一)Unity换装实现 - 知乎
Q:CommandBuffer是什么
A:CommandBuffer携带一系列的渲染命令,依赖相机,用来拓展渲染管线的渲染效果。Unity 的CommandBuffer基础_漫漫之间n的博客-CSDN博客_commandbuffer
Q:shader预加载是什么?如何收集?收集会有什么问题?如何减少shader大小?
A:转一篇 ShaderVariantCollection介绍的比较详细的文章 感谢作者 - rexzhao - 博客园
Q:Unity提供了几种光源,分别是什么
Q:LightMap?
A:就是指在三维软件里实现打好光,然后渲染把场景各表面的光照输出到贴图上,最后又通过引擎贴到场景上,这样就使物体有了光照的感觉。
Q:Forward Rendering(正向渲染/前向渲染)与 Deferred Rendering(延迟渲染)
A:正向渲染和延迟渲染彼此之间有什么不同_Lion.Kuo的博客-CSDN博客
Q:SRP?URP?HDRP?
Q:AlfaTest?
Q:半透明为何耗时
A:因为渲染顺序
Q:前向渲染与延迟渲染
A:前向渲染和延迟渲染的区别
Q:渲染消耗点
A:灯光、阴影、抗锯齿、drawcall
Q:TextureStream
A:纹理串流系统可以控制 Unity 加载到内存中的 Mipmap 级别。该系统可减少 Unity 对于纹理所需的内存总量,因为它只加载 Unity 在场景中渲染当前摄像机位置时所需的 Mipmap,而不是默认加载所有 Mipmap。该系统通过消耗少量 CPU 资源来节省潜在的大量 GPU 内存。纹理串流 (Texture Streaming) - Unity 手册
Q:CommandBuffer
Q:为什么阴影会增加消耗
A:https://docs.unity3d.com/cn/current/Manual/LightPerformance.html Shadow Map 原理和改进_ronintao的博客-CSDN博客_shadowmap
首先会对模型进行深度计算,会让材质检测接受阴影(不需要接受阴影可以在mesh的component选项那关掉也能优化性能),接受到阴影的材质会多一个pass,。。
Q:草(一种植物)的合批怎么做
Q:渲染流程
A:应用阶段→几何阶段→光栅化
Unity Shader渲染流程详解-腾讯游戏学堂
程序员 - 一篇文章搞懂到底什么是渲染流水线_个人文章 - SegmentFault 思否
绿色表示完全可编程控制,黄色表示可配置,蓝色表示由GPU固定实现,不可修改
资源内存
Q:如何查内存泄漏
Q:如何真正的销毁asset
A:使其引用数为0时调用Resources.UnloadUnusedAssets(),Resources.UnloadUnusedAssets()会真正释放内存及显存,但此接口尽量不要频繁调用,因为会有较大的性能开销。
Q:贴图Read/Write的影响?是哪里的内存多了?
内存回收
Q:垃圾回收如何判断存活
A:1.引用计数 2.根搜索算法 GC回收之一:判断对象存活算法、四种引用、回收方法区_稳重的二哈的博客-CSDN博客_方法区中类静态属性引用的对象
Q:Unity GC
A:【性能优化】内存管理和GC优化 - 知乎
Q:知道贝母垃圾收集器吗
A:Unity使用贝母垃圾收集器 解读MONO内存管理和回收 - 知乎 看完觉得还是标记清除法。。
Q:标记清除法是怎样
A:标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。
在标记阶段首先通过根节点(GC Roots),标记所有从根节点开始的对象,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。
你似乎来到了没有知识存在的荒原 - 知乎
Q:知道垃圾回收代吗
A:4种垃圾收集算法及7种垃圾收集器:GC回收之二:4种垃圾收集算法及7种垃圾收集器_稳重的二哈的博客-CSDN博客_垃圾回收算法
Q:GC卡顿怎么办
A:(1)寻找GC时机 (2)2019.1增量式GC(支持大部分平台 需要.NET 4x或更高版本)
Q:增量式回收
A:译文Unity 2019.1 Alpha新功能:增量式垃圾回收 | Imagination中文技术社区 原文Feature Preview: Incremental Garbage Collection | Unity Blog
检测方法
Q:性能消耗测试
A:耗时测试:C# - StopWatch | Unity - Profiler.BeginSample/EndSample
unity性能工具:UWA、UPR
代码内存:UWA
Q:查看DC
A:frame debug
Q:查看资源内存
A:UWA快照/UPR快照
Q:如何查代码内存泄漏
A:UWA付费功能
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可以出详细报告。
C#基础
Q:类型
A:值类型(简单类型、枚举类型、结构类型)引用类型(Class、Interface 、Array 、Delegate )
Q:什么是值类型,什么是引用类型?区别?
A:值类型和引用类型区别 - 好好學習 - 博客园
分配在堆栈、值一般小引用可大可小、值默认0引用默认null需要new、值类型进行复制/引用类型引用地址、回收、GetType.IsValueType
Q:什么是栈、堆?
A:【C#】C#值类型与引用类型、内存区域_PA_的博客-CSDN博客
Q:装箱与拆箱
A:int x = 1023;
object o = x; //装箱 装箱会分配内存
int y = (int) o; //拆箱
.NET基础知识-装箱与拆箱 - hypo106 - 博客园
Q:GC是什么?具体机制是怎样?它是怎么知道哪些对象可以被回收的?
A:https://www.jianshu.com/p/53439af1eb00
Q:什么是垃圾回收代?
A:垃圾回收可以选择回收第几代。
内存最开始分配在第0代,每次回收会把有引用的放到1代,相当于顽固内存,然后每次gc只会检查第0代,这样效率高一些,
等到1代也满了,就会去回收第1代,还存活就会放到第2代(下一代),终极顽固内存
代也满了之后,会把代扩大。
Q:类和结构区别
A:1)struct是值类型,class是对象类型 2)struct不能被继承,class可以被继承 3)struct默认访问权限是public,而class默认是private 5) struct不能由程序员申明构造函数,有编辑器自动生成,用于描述轻量级对象,执行效率高,例如:Line,Point等 6)struct的new和class的new是不同的,struct的new就是执行一下构造函数创建一个实例,再对所有字段进行复制。 而class则是在堆上分配一块内存再执行构造函数,struct内存并不是在new的时候分配的,而是是定义的时候分配。 7)struct 可以不用new来实例化,而类却要,如果struct不用new来实例化,那么结构的所有字段处于未分配状态。
.NET中类和结构的区别 - 君莫笑·秋 - 博客园
Q:构造函数和析构函数是什么
A:c#学习笔记——构造函数和析构函数 - XueWJ - 博客园
Q:接口interface、抽象函数abstract和虚函数virtual
A:[c#] 虚函数(Virtual),抽象函数(abstract)和接口的区别 - Staid - 博客园 【C#】什么时候使用virtual什么时候使用abstract - Doc.stu - 博客园
Q:重载与重写
A:重载就是在同一个类中,方法名相同,参数列表不同。参数列表不同包括:参数的个数不同,参数类型不同等。
重写就是子类重写父类的方法,在调用的时候,子类的方法会覆盖父类的方法,也就是会调用子类的方法。在父类中的方法必须有修饰符virtual,而在子类的方法中必须指明override。
Q:修饰符有哪些?
A:【C#】修饰符_PA_的博客-CSDN博客
Q:static
A:C# static的用法详解 - 遥远的Ta - 博客园
Q:params
A:C# params 用法简介_Bird鸟人的博客-CSDN博客_params
Q:string 和 StringBuilder异同
A: string 区别:C#中String和StringBuilder的区别 - .net&new - 博客园
Q:"",string.Empty和null三者的区别
A:“”和empty一样 都会指向string类定义的static readonly String Empty;这个在开始就已经分配好了 C#中string.Empty、""和null 之间的区别_米刀文的博客-CSDN博客_.net string.empty
Q:C# == 与 Equal区别
A:C#中Equals和= =(等于号)的比较) - wlchen - 博客园
Q:可选参数和命名参数(C# 7.2)
A:microsoft
Q:什么是反射;C#如何调用外部动态链接库
A:反射提供描述程序集、模块和类型的对象(Type 类型)。 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后调用其方法或访问器字段和属性。 如果代码中使用了特性,可以利用反射来访问它们。C#反射实现 - 矜持先森么么哒 - 博客园
Q:线程、进程、协程
A:https://blog.csdn.net/fadbgfnbxb/article/details/88787361
A:线程、进程
Q:协程是什么,如何一帧后执行,如何跳出,如何停止,与C#线程区别? 协程会阻塞吗
A:区别 会,通过一些消耗判断而决定进行多少处理
Q:ref out异同
A:out 和 ref 相同点:它们都是传址的,执行方法后,原来的值都改变了。
out 和 ref 不同点:1、ref须初始化;out不用初始化。2、退出方法时,所有out参数都必须赋值。
Q:委托是什么,事件是委托吗
A:委托(Delegate) 可以把一个方法作为参数带入另一个方法。委托可以理解为只想函数的指针。
事件是对象用于(向系统中的所有相关组件)广播已发生事情的一种方式。 任何其他组件都可以订阅事件,并在事件引发时得到通知。解耦合
C#中的委托是什么?事件是不是一种委托?_哔哩哔哩_bilibili
Q:Func,Action,delegate区别
A:C#委托的介绍(delegate、Action、Func、predicate) - @大龙哥 - 博客园
Q:用lambda表达式对List<T>进行排序
A:List<Student> stuList= stu.OrderBy(s=> s.stuNO).ToList<Student>();
Q:dynamic和var
A:dynamic
是一种静态类型,类型为 dynamic
的对象会跳过静态类型检查。 var是编译器确定类型
Q: "<<" 和 ">>" 是什么 value << index,并列举‘位运算’在日常开发中的使用场景。
A:位运算计算方式与实例_PA_的博客-CSDN博客_位运算怎么计算
Q:异常处理机制?
A:try - 程序代码块;catch异常处理代码块;finally 无论是否发生异常,均要执行的代码块;
Q:using?
A:using 语句允许程序员指定使用资源的对象应当何时释放资源。为 using 语句提供的对象必须实现 IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。
可以在到达 using 语句的末尾时,或者在该语句结束之前引发了异常并且控制权离开语句块时,退出 using 语句。
Q:泛型
A:泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。
Q:多线程的栈
A: 栈一般都是独立的所以线程安全,一般用户不会去手动访问栈,都是操作系统自己管理,堆是线程之间共用的,不然多线程没办法交互就那就没什么意义了
比如有个公共数据比如是所有玩家数据,是个map,new出来就是放在堆里,多线程可以访问它,加个互斥锁就可以线程安全了
多线程中 堆和栈的区别 - youxin - 博客园
Q:什么是并行、并发,协程和线程可以并行吗?
A:https://www.cnblogs.com/xc-chejj/p/10813692.htm
数据结构和算法
数据结构
Q:C#容器有哪些,底层实现原理,描述使用场景,异同优缺点;
A:优缺点:C#中Array、arrayList、List的优缺点_大牛的征程的博客-CSDN博客
- 数组:表示一组数据的集合,在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单;数据量长度明确的时候性能比List好。
- ArrayList:类型不安全,装拆箱性能损耗。
- List :最常用的泛型容器,自动扩容的,没有类型安全问题的arraylist,不用装箱拆箱,遍历非常方便;
如何扩容:先开辟一定空间(默认4),每次添加元素,空间不足则加长长度,然后转移。所以如果清楚长度,最好可以预先开辟好。
用于:知道容器内放置多少物品,并且需要频繁遍历,更新对象生命周期等时候,比如存放角色对象,子弹对象 - Dictionary(泛型):Dictionary实现,底层维护2个数组,一个哈希桶(因为会多次取余来寻找 所以叫做hash桶),一个Entry结构数组(里面有hashcode key value count),通过key转hash然后取余对应到entries的index,看里面的hashcode是否对应,不对应再去取余寻找,直到找到结果或者返回null;
hash算法是补全,然后多次计算,是为了防冲突。拉链法解决冲突,链太长就再hash。
适用于经常查找的地方,其查询时间复杂度几乎为o(1) ,比如角色内部的某些数据,需要频繁的变化,我们可以根据key vlae的结构获取 - Queue(泛型):遵循先进先出的队列
- Stack(泛型):遵循后进先出的栈
- LinkedList(泛型):链表类型(反序)
Q:排序有哪些 复杂程度 以及算法是否稳定?
A:数据结构常见的八大排序算法(详细整理) - 竹雨听闲 - 博客园
Q:List和Dictionary,增加,插入,删除的时间复杂度
A:常用数据结构及复杂度 - sangmado - 博客园
Q:遍历删除的方式有几种
A:1.for循环遍历Remove 2.RemoveAll 3.Linq
Q:List直接foreach遍历remove可以吗,该怎么做
A:不可以 https://www.cnblogs.com/luyu1993/p/7148765.html ; Foreach循环中为什么不要进行remove/add操作_OxYGC的博客-CSDN博客_为什么foreach中不能使用remove for倒叙remove或者continue 或者 Linq
Q:设计一张哈希表,如何解决哈希冲突
Q:一个无序数组,获得第K大的数
A:如何寻找无序数组中的第K大元素? - murphy_gb - 博客园
Q:排行榜如何快速查前1000名
A:跳表 红黑树
Q:什么是动态规划
Q:两个有序数组合一个 怎么排序
A:双指针
Q:用3种方法数组求和
算法题(提示:大佬推荐看《算法导论》,算法题无穷无尽,面算法建议多刷题)
Q:判断线段相交,射线和四边形碰撞是否相交
A:计算几何——快速排斥实验和跨立实验 - TangMoon - 博客园
Q:两个四边形是否相交(给四边形中间点和长宽)
A:如何判断两个矩形相交_wangicter的博客-CSDN博客_两个矩形相交
Q:目标是否在视野范围内
A:1.与目标距离适合 2.目标向量与自身方向法向量的夹角适合
Q:点是否在扇形内,线段是否与椎体相交
A:https://www.geometrictools.com/Documentation/IntersectionLineCone.pdf
Q:怎样判断平面上一个矩形和一个圆形是否有重叠?
Q:任意一条曲线,如何知道两点间曲线长度
Q:移动相关公式,运动给一段线路,初速度为0,然后匀速运动,然后停止,求加速度路程时间;匀速路程时间;和减速路程时间;
A:加速度 a=v/t 路程 ①s=vt ②s=v0t + ½at^ 自由落体 h = ½gt^
Q:问如果碰撞的运动判断超过了碰撞体
A:射线长度和运动下个位置挂钩
Q:当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?
A:隧道效应,物理碰撞可能检测不到。
建议修改速度或者大小,或者提前发射线检测距离,或者提前算好下一帧位置,手动去检测等
Q:如何判断两个凸多边形是否相交?
Q:判断在前在后?判断在左在右?
A:点乘;叉乘 Unity3D中目标相对自身的前后左右方位判断_Season的博客-CSDN博客
Q:在平面上已知三个点 A(x1, y1) , B(x2, y2) , C(x3, y3) ,如何判断点 C 在向量 AB 的左侧还是右侧?
A:B点-A点=向量AB C点-A点=向量AC
通过两向量叉乘得到,ABC所在平面的法向量,判断法向量向上还是向下,判定左侧和右侧
Q:曲线知道哪些
Q:祖玛的球回旋运动公式
Q:斐波那契数列曲线
Q:暗黑二背包算法
框架和设计模式
Q:设计模式有哪些? 说一下应用场景?
A:C#设计模式23 菜鸟教程设计模式
- 单例模式(略)(所有系统都基本是)
- 工厂模式 (子弹)工厂模式 | 菜鸟教程
- 观察者模式:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面 向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。(例如子弹时间?)
Q:MVC、MVP、MVVM框架 区别
A:MVC MVP(清晰理解+应用实例) 区别
Q:ECS框架,优点
A:entity component system ①解耦 ②内存cache友好
Q:继承与组合
Q:通用与特殊
Lua
基础(大佬推荐看...)
Q:变量有哪些?
A:nil bool string number function thread table
Q:pairs和ipair区别 for i=1,n do和for ipairs区别?
A:浅析Lua中table的遍历_菜鸟浮出水的技术博客_51CTO博客
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:闭包就是能够读取其他函数内部变量的函数。 闭包_百度百科
Q:table是怎么实现既有List特性又有Dictionary特性的?
A:写代码
Q:C#和lua通讯原理
A:压栈进行数据交互 【Lua与C#交互①】Lua中的栈_水曜日鸡的博客-CSDN博客
Q:如果key是string,怎么存进table里
A:直接散列找到桶地址然后遍历桶,找到就修改,找不到就添加
Q:xlua和其他slua,tolua有啥区别,如何选择
A:xLua
Q:Lua会吗,看过源码吗
A:不会,没看过
性能优化
lua:部分常用操作的效率对比及代码优化建议(附测试代码)_Azure丶的博客-CSDN博客_lua 执行效率
Lua性能优化_此处有码的博客-CSDN博客_lua性能优化
网络
Q:帧同步与状态同步的优劣对比
A:【Unity】网络同步方案 帧同步与状态同步_PA_的博客-CSDN博客_unity状态同步
Q:网络层
A:网络层(互联网中的网络层)_百度百科
Q:讲TCP、UDP和HTTP关系和区别
A:TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层中有TCP协议与UDP协议。
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。
Q:网络信息的信息池
Q:可靠UDP传输原理
A:可靠UDP传输协议总结 - 知乎
Q:TCP的三次握手和四次挥手
A:TCP的三次握手与四次挥手理解及面试题(很全面) - 李卓航 - 博客园
Q:UDP如何保证消息送达?在网络较差时如何处理?UDP如何重传的,如何保证有序的
Q:TCP滑动窗口
Q:scoket链接直接发
A:需要自定义二进制数据的格式和加密、黏包(字节流是无界限的 要去识别有多少个包)、拆包(包太大拆开发,在缓存池等待下个包)那些
Q:Protobuf的结构是怎样的?怎么实现高压缩率(TODO:表述有问题,待修正)
A:Protobuf结构是Tag-Length-Value
Q:MTU
A:IP层的限制
系统
Q:SDK接过吗,是什么?如何使用?
Q:IOS签证和证书了解吗?
Q:安卓与IOS生命周期?
Q:回调方法描述?
Q:Android平台防止反编译。有什么好的解决方案?
A:资源商量里面有这种解决方案
Q:计算机原理是什么
A:百科
-----------------------------------------------------------------------------------------------
总结
对于求职,最好有专研某个方向,能突出自己能力的亮点,但也要有相应的基础。
有工作经验的,只需要把自己做的东西说出来,不一定要求很高的技术深度,但起码要做好、讲清楚。
对于刚毕业的同学,只需要搞好基础,强烈建议多做准备进入一家好点的大点的公司(有免费现磨咖啡下午茶^.^ 开玩笑的,学到东西才是最重要),会让你的学习和工作顺风顺水。
比较好的面试官有一步步的引导解题和给予一定反馈。
面试也是一次试炼,面试完可以多做总结。
面试流程
先简短的自我介绍,
大公司基本上都是问简历上的工作内容实现方案,看有没搞懂,然后看高度和深度,
也会问一下unity基础、C#基础、算法,
有些公司可能会先给笔试甚至机试。
面试的题外话
为什么离职
工作中遇到的困难且如何解决的
看过什么源码
看过什么书
以前担当的角色和业绩
你还有什么问题要问吗
平时如何提升自己的技术和知识水平
是否有关注一些技术网站?比如?
有什么情趣爱好
有什么特长 -- (上个公司游戏联盟比赛冠军,MVP之一,最强adc之一,擅长金克斯,小炮,女枪等爆发型adc,喜欢发育,对线一般,需要有保护的辅助,抗压能力强,即使对面出动一个师的兵力来gank,后期也依然能裤裆掏钱发育起来,可打出成吨输出,收割战场。以上都不行。要说正常的)
为什么选择这里,有在这里长期发展的打算吗
对自己未来职业生涯如何规划
问问题(看自己情况而问)
对自己面试打个分
公司做一些什么技术性的东西
进入做什么项目
进入可以获得什么培养
团队氛围,上班时间,福利情况
给点意见
--------------------end---------------------