【Unity】面试题目记录和解答

前言

面向阅读者:unity或c#面试者

 

Unity基础

基础

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渲染列队(所有数值越大越后渲染,显示越靠前)→坐标

UGUI

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:动态打图集

DrawCall

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

UI

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

debug方法

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

 

C#基础

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:祖玛的球回旋运动公式

 

Lua

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:生命周期

【Unity】面试题目记录和解答_第1张图片

Q:回调方法描述

IOS

Q:生命周期

 

-----------------------------------------------------------------------------------------------

总结

说一下面试流程,先简短的自我介绍,然后大公司基本上都是问简历上的内容实现方案的高度和深度,也可能会问一下unity基础、C#基础,中小公司可能会先给笔试甚至机试。

比较好的面试官有一步步的引导解题和给予一定反馈。

对于求职,最好有专研某个方向,能突出自己能力的亮点,但也要有相应的基础。
也有些面试总会问到很多,也许也是因为公司的期望,期望员工本就能独立完成所有,也有自己的强项;而我们要做到的甚至是不可替代。

面试也是一次试炼,面试完可以多做总结。

你可能感兴趣的:(Unity3D,C#)