Unity3d面试题总结

发布 2019-06-17 07:47:35 阅读 5521

数据结构和算法很重要,图形学也很重要!

大的游戏公司很看重个人基础、综合能力;

小公司看你实际工作能力,看你的demo。

高频问答的问题:

1.如何优化内存?

有很多种方式,例如。

1.将暂时不用的以后还需要使用的物体隐藏起来而不是直接destroy掉;

2.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;

3.使用光照贴图,使用多层次细节(lod),使用着色器(shader),使用预设(prefab)。

1.使用unity3d实现2d游戏,有几种方式?

1.使用本身的gui;

2.把摄像机的projection(投影)值调为orthographic(正交投影),不考虑z轴;

中的碰撞器和触发器的区别?

碰撞器有碰撞的效果,istrigger=false,可以调用oncollisionenter/stay/exit函数;

触发器没有碰撞效果,istrigger=true,可以调用ontriggerenter/stay/exit函数。

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

两个物体都必须带有碰撞器(collider),其中一个物体还必须带有rigidbody刚体。

和rigidbody的区别?

charactercontroller自带胶囊碰撞器,里面包含有刚体的属性;

rigidbody就是刚体,使物体带有刚体的特征。

5.在物体发生碰撞的整个过程中,有几个阶段,分别列出对应的函数。

三个阶段。进入碰撞)

(逗留碰撞)

当退出碰撞)

6.什么叫做链关节?

hinge joint,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。

8.物体自身旋转使用的函数?

9.物体围绕某点旋转使用的函数?

提供了一个用于保存和读取数据的类(playerprefs),请列出保存和读取整形数据的函数。

提供了几种光源类型,分别是哪几种?

四种。平行光:directional light 点光源:point light

聚光灯:spot light区域光源:area light

脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法。

awake(只要物体启用才开始执行)——start(只要脚本启用才开始)——onenable(当前脚本启用执行)--update(start执行结束才执行)——lateupdate(延迟更新)——fixedupdate(固定更新,如移动的物体)——ongui(渲染和处理gui事件时调用。这意味着你的ongui程序将会在每一帧被调用。)—reset(重置,仅在编辑模式下)——ondisable(当不可用,对象变为不可用或附属游戏对象)——ondestroy(当销毁时被调用)

13.物理更新一般放在哪个系统函数里?

fixedupdate,每固定帧绘制时执行一次,和update不同的是fixedupdate是渲染帧执行,如果你的渲染效率低下的时候fixedupdate调用次数就会跟着下降。fixedupdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。update就比较适合做控制。

14.当游戏中需要频繁创建一个物体时,我们需要怎样做能够节省内存?

使用预制物体对象prefab,然后复制创建。

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

游戏界面可以看到很多摄像机的混合。

17.请描述prefab的作用,并描述如何在移动设备的环境下恰当的使用它?

prefab在实例化的时候用到,主要用于经常会用到的物体,属性方便修改。

18.请简述unity3d下如何安全的在不同工程间迁移asset数据,请列举出三种方法?

1.可以把assets目录和library目录一起迁移。

2.导出包。

3.用unity带的assets server功能

19.请描述为什么unity3d中会发生在组件上出现数据丢失的情况。

一般是组件上绑定的物体对象被删除了。

blend工作原理。

alpha blend 实现透明效果,不过只能针对某块区域进行alpha操作,透明度可设。

21.获取、增加、删除组件的命令分别是什么?

获取:getcomponent

增加:addcomponent

删除:destroy

命令作用是:(c)

a.动画放大 b.动画转换 c.动画的淡入为其他动画。

命令为:(a)

a.加载关卡 b.异步加载关卡 c.加载动作。

24.调试记录到控制台的命令是什么?

与position的使用区别?

localposition:自身位置,相对于父级的变换的位置。

position:在世界坐标transform的位置。

26.请简述向量的点乘,向量的叉乘以及向量归一化的几何意义?

点乘的几何意义是:计算两个向量之间的夹角,以及在某一方向上的投影;

叉乘的几何意义是:创建垂直于平面,三角形,或者多边形的向量;

27.请说出4种面向对象的设计原则,并分别简述它们的含义。

1) 单一职责原则 (the single responsiblity principle,简称srp):一个类,最好只做一件事,只有一个引起它的变化。

2) 开放-封闭原则 (the open-close principle,简称ocp):对于扩展是开放的,对于更改是封闭的。

3) liskov 替换原则(the liskov substitution principle,简称lsp):子类必须能够替换其基类。

4) 依赖倒置原则(the dependency inversion pricinple,简称dip):依赖于抽象。

5) 接口隔离原则 (the inte***ce segregation principle,简称isp):使用多个小的专门的接口,而不要使用一个大的总接口。

和physic material区别?

physicmaterial 物理材质:物理材质描述,如何处理物体碰撞(摩擦,弹性)。

material材质(材质类)为了获得一个对象使用的材质,可以使用 属性:

29.关于vector3的api

与vector3(0,0,1)是否一样;

插件的作用是什么,itween作用于世界坐标还是局部坐标,请列举出3个其常用方法?

itween是一个动画库,作者创建它的目的就是最小的投入实现最大的产出。让你做开发更轻松,用它可以轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等“

方法:a、moveto 物体移动 ;b、colorto:随着时间改变对象的颜色组; c、lookto:随时间旋转物体让其脸部朝向所提供的vector3或transform位置。

31.请简述ngui中panel和anchor的作用。

anchor包含uianchor脚本。uianchor的功能是把对象锚定在屏幕的边缘(左上,左中,左下,上,中,下,右上,右中,右下),或缩放物体使其匹配屏幕的尺寸。

panel对象有uipanel脚本,uipanel是一个容器,它将包含所有ui小部件,并负责将所包含的部件组合优化,以减少绘制命令的调用。

32.请描述meshrender中material和shader的区别?

shader(着色器)实际上就是一小段程序,它负责将输入的mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的shader,以及对shader的特定的参数设置,将这些内容(shader及输入参数)打包存储在一起,得到的就是一个material(材质)

shader大体上可以分为两类:表面着色器(su***ce shader) 、片段着色器(fragment shader)