Unity面试总结

话不多说,全文用QA的方式展示,大致分为Unity、C#、其他三个部分。

Unity部分

 1. unity脚本整个生命周期中比较重要的方法

  • Awake 当脚本创建的时候调用,仅一次
  • OnEnble 当对象变为可用和激活时调用
  • Start 在任意一种update方法第一次调用前调用,仅一次
  • Update 每一帧时调用
  • FixedUpdate 固定频率调用,FixedUpdate多用于物理计算和更新
  • OnDisable 当对象变为不可用和不激活时调用
  • OnDistory 当对象销毁时调用

2. 简述prefab的用处

prefab相当于一个模板,在游戏运行时可以通过prefab实例化出多个实例对象。

3. 物体发生碰撞的必要条件

两个对象都必须带有Collider(碰撞器),其中一个物体还必须带有Rigidbody(刚体)。

4.unity中的碰撞器和触发器的区别

  • 在collider组件上有属性IsTrigger来选择是否为触发器
  • 碰撞器彼此之间不会进入对方,而触发器可以
  • 碰撞器触发事件时会调用OnCollisionEnter、OnCollisionStay、OnCollisionExit函数。触发器触发事件时会调用OnTriggerEnter、OnTriggerStay、OnTriggerExit函数。

5. unity的光源有几种类型,分别是什么

  • Directional Light:平行光源,如同现实中的太阳光源
  • Point Light:点光源,如果现实中的蜡烛
  • Spot Light:聚光灯光源,如同现实中的手电筒
  • Area Light:区域光源

6. 什么是AssetBundle

AssetBundle是unity的一种资源包文件,我们可以将游戏中使用到的游戏资源打包成Assetbundle,在游戏运行时动态加载游戏资源。

7. 如何动态加载Assetbundle,以及加载过程

  • 使用静态方法Assetbundle.LoadFromFile将Assetbundle文件从硬盘加载到内存中
  • 之后通过获取到的Assetbundle变量,使用Assetbundle.LoadAsset方法获取Assetbundle中的资源
  • 最后通过Instantiate方法实例化出对象

7.1 unity除了Assetbundle之外还有哪些动态加载资源的方式,并说说各自的优缺点

  • 可以使用Resources.Load方法加载资源,资源需要放在unity默认的Resources目录中,但在游戏实际开发中并不建议使用。
  • Resources方法的优点是可以不用打包,将资源放入目录就可以在运行时加载了。缺点是Resources目录无法动态更新,所以在游戏发布和版本升级上不适用。
  • Assetbundle的优点是可以将资源分块加载,将相关联的资源打包成一个Assetbundle,便于资源的管理。缺点是在每次资源更新之后都需要重新打包。

8. 什么是渲染管线

渲染管线就是将场景内给定的三维物体、光源、纹理等信息绘制到摄影机的过程,也就是将三维场景绘制成二维图像的过程。

9. MipMap是什么?它的作用是什么?优点与缺点是什么?

  • MipMap是一个针对纹理贴图的技术
  • MipMap技术会根据摄影机距离模型的远近选择不同精度的贴图,以优化渲染效率
  • 优点:优化现存带宽,提升渲染性能。  缺点:内存占用上升,使用MipMap会根据摄影机远近生成8张贴图。

10. LOD是什么?他的作用是什么?优缺点是什么?

  • 全称Level Of Detail,中文翻译为“多层级细节”
  • LOD会根据模型距离摄影机的距离,选择不同精度的模型,摄影机越近则选择高精度的模型,远则反之。
  • 优点:提高渲染效率,优化了性能。  缺点:增加了内存占用。

11. 什么是Coroutines(协同程序)

在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程。

12. 在场景中放置多个Camera并同时处于活动状态会发生什么

游戏界面会看到多个摄影机图像的混合。

13.unity中UI的排序顺序是什么样的

  1. ScreenSpace-Overlay渲染模式的Canvas会渲染在最上层,之后根据Canvas的Sort Order值排序,值越大越在上层
  2. ScreenSpace-Camera渲染模式下会先根据Canvas绑定的Camera排序,Camera中的Depth值越大越在上层。之后根据Canvas的Order in Layer排序,值越大越在上层。
  3. 同是ScreenSpace-Overlay渲染模式或ScreenSpace-Camera渲染模式绑定同一个Camera的Canvas,根据Canvas中的SortOrder或OrderInLayer值来排序,数值越大越在上层。
  4. 同一个Canvas下的对象根据Hierarchy窗口下的顺序排序,越下面的对象越在上层。

14. 简述什么是Quaternion(四元数)

15. 什么是Darwcall,如何优化Darwcall

引擎每一次对GPU的调用的过程叫做Drawcall。

  • 将相关的零散图片资源放到同一个Sprite中,这样多次Drawcall调用机会合并成一次
  • 将使用同一图集的对象排序在一起,使用同一图集的对象会被一起绘制以减少Drawcall。

16. 什么是lightmap,有什么作用

lightmap就是事先烘焙好的光照贴图,这样可以避免使用实时光照,可以减少Drawcall提高性能。

17. RawImage和Image的区别

  • RawImage可以显示任何类型的Texture,而Image只能显示Sprite
  • RawImage支持UV Rect,Image支持Simple(简单)/Sliced(切片)/Tiled(平铺)/Filled(填充)

 

C#部分

1. 什么是GC(垃圾回收),如何避免和减少GC

GC全称garbage collector,是系统对不再被使用到的对象进行自动内存回收的机制。

  • 将String换为StringBuilder
  • 使用对象池,对于频繁创建销毁的对象可以采取缓存的策略
  • 尽量减少new的使用
  • 用struct代替class

2. struct和class有什么区别

struct是值类型,class是引用类型

3. 值类型和引用类型有什么区别

  • 值类型的变量直接包含了数据,引用类型的变量值保存了指向数据的引用。
  • 每个值类型变量都拥有自己复制的数据,每个值类型变量操作不会相互影响。而两个值类型变量可以指向同一个对象,操作一个变量可能会影响另一个变量的数据。

4. 什么是装箱、拆箱

装箱是让一个值类型隐式的转换为引用类型,从任何值类型到object类型

拆箱是让一个引用类型显式的转换为一个值类型,从object类型到任何值类型

5. 什么是委托

委托是值类型,通过委托可以将方法赋值给变量,或者作为参数传递给函数。委托和c++中的函数指针概念类似,但委托是类型安全的。

6.什么是面向对象

面向对象的核心思想包括抽象、封装、继承和多态。

抽象在于将逻辑化的编程语言以模块化的方式进行思考,使逻辑编程更符合人类原本的思维方式,对象化的思维方式本身就更符合人们平常的思维方式。

封装是使用编程语言本身的机制对代码进行模块化的封装,让代码以类的形式进行组织,让类具有自己的内部隐藏数据和外部操作接口。

继承则让类之间具有层次结构,可以让程序员层次化的组织代码工程。

7. 什么是静态构造函数

  • 静态构造函数用于初始化静态数据,或执行仅需一次的特定操作。
  • 静态构造函数在第一个实例创建前,或引用任一静态成员前调用。
  • 静态构造函数由系统调用,不使用访问修饰符和不具有参数。
  • 静态构造函数不能继承或重载。

 

图形部分

1.JPG、PNG、BMP、GIF有什么不一样,优点和缺点是什么

  • JPG:有损压缩,。优点:文件数据小。缺点:会丢失图像数据
  • PNG:无损压缩,画质中等,多用于程序、游戏。优点:可保存alpha通道。缺点:画质中等
  • BMP:无损压缩,画质高,多用于壁纸、高清图片。优点:画质高完整保存图像数据。 缺点:文件数据大。
  • GIF:无损压缩,画质低,存储多张图片可构成简单动画,多用于动图。优点:可存储动图。缺点:画质差。

 

网络部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值