Unity面试知识点

1、面试方式 :所有面试,只有3家有面试题,蓝港是其中之一,题量2-4页不等;其他都是1对1,2对1,或者3对1直接面试;主要考C#、unity基础,大公司问的不难,但问得深,基础必须扎实。

2、3D图形学 :比如 渲染管道 流程。

3、数学、数据结构 :二维矩阵、三维 矩阵 相乘、转置; 向量点乘和叉乘 方法和意义;二叉树、堆栈;线性表、链表。

4、unty3d :熟悉 NGUI (原理机制);物理引擎; DrawCall 优化; AI、自动寻路; 做 unity3d遇到的坑 (unity吭特多,只有亲手做过才知道),动画系统。

5、C#语言 :Event和 委托; 抽象类和接口; 垃圾回收器 。

6、英语能力 : 外语文档阅读能力 顺畅,因为很多时候要去国外网站了解新技术,所以这个是做的好的关键。面试的时候,也会给你一篇英文技术文档给你翻译。

7、思想 : MVC思想 、 代码耦合性; 代码编写风格(代码头部注释、方法注释);爱玩的游戏以及对它的 评价 (缺点,怎么改进更好); 如果让你设计一个MMO,你应该怎么做 等。

下面举几个面试的具体例子:

  1、一个物体,它顶上有个摄像机,摄像机离他越来越远,最后让物体消失(不是隐藏它)。

 2、鼠标点击一个物体,然后屏幕上显示他的坐标和名称信息。

参考网址

   http://www.cnblogs.com/zhibolife/p/3680621.html

    http://www.cnblogs.com/zhibolife/p/3624916.html

1、请简述值类型与引用类型的区别。

值类型传递的是值本身,引用类型传递的是地址。


2、C#中所有引用类型的基类是什么?

object


3、请简述ArrayList和List之间的主要区别。

  LIST是接口类,ArrayList类实现了这个接口,可以这样用:List a=new ArrayList();


4、请简述GC(垃圾收集)产生的原因,并描述如何避免。

      GC一般是回收在堆上的内存,所以一般new的话 只new在栈上就好了 ,适当的做些objectpool,也会减轻gc的压力。


5、请描述interface和抽象类之间的不同。

网上很多


6、下列代码在运行中,会产生几个临时对象?

?
1
2
string a= new string (“abc”);
a=(a.ToUpperCase()+“123”).SubString(0,2);

  


7、下列代码在运行中会发生什么问题?如何避免?

?
1
2
3
4
5
6
List< int > Is= new List< int >( new int []{1,2,3,4,5});
foreach ( int n in Is)
{
Debug.Log(n*n);
Is.Remove(n);
}

 foreach会产生大量临时对象 直接 Is.Clear()多好

 

  8、请简述sealed关键字用在类声明时与函数声明时的作用。

 

   作为类别的时候 不能有子类 作为函数的修饰符的时候 在子类里不能重写函数

 

 

9、请简述private,public,protected,internal的区别。

private:私有成员,在类的内部才可以访问。

public:公共成员,完全公开,没有访问限制。

protected:保护成员,该类内部和继承中可以访问。

internal:当前程序集内可以访问。


10、请简述反射的实现原理。


11、请简述.Net与Mono之间的关系。

  mono是.net的一个工具,.net只能在windows平台下跑,mono可以跨平台,可以运行于Linux,FreeBSD,Unix,OS X和Solaris


12、请简述Unity3D支持的3种脚本语言的名称。

  C#、JS、BOO


13、Unity3D是否支持写成多线程程序?如果支持的话要注意什么?

支持:如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine。

注意:C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象


14、Unity3D中的协程(coroutine)和C#线程之间的区别是什么?

Unity3d没有多线程的概念,不过unity也给我们提供了StartCoroutine(协同程序)和LoadLevelAsync(异步加载关卡)后台加载场景的方法。 StartCoroutine为什么叫协同程序呢,所谓协同,就是当你在StartCoroutine的函数体里处理一段代码时,利用yield语句等待执行结果,这期间不影响主程序的继续执行,可以协同工作。而LoadLevelAsync则允许你在后台加载新资源和场景,所以再利用协同,你就可以前台用loading条或动画提示玩家游戏未卡死,同时后台协同处理加载的事宜asynchronous[e ɪˈ s ɪŋ kr ə n ə s] .synchronous同步。


15、请说出Unity3D中勇于记录节点空间几何信息的组件名称,及其父类名称。

transform,父类component 


16、请简述四元数的作用以及四元数相对欧拉角的优点。


17、请简述向量的点乘,向量的叉乘以及向量归一化的意义。


18、请简述矩阵相乘的意义以及注意点。


19、请简述为何大家都在移动设备上寻求Unity3D的原生GUI系统的替代方案。


20、请简述如何在不同分辨率下保持UI的一致性。


21、请简述为什么dynamic font在unicode环境下优于static font。


22、请简述Renderer的作用,并描述MeshRenderer与SkinnedMeshRenderer之间的关系
与不同。


23、请简述SkinnedMesh的实现原理。


24、在场景中Prefab的作用,并描述如何在移动设备环境下恰当的使用它。


26、如何销毁一个UnityEngine.Object及其子类。


27、请简述为什么Unity3D中会发生在组建上出现数据丢失的情况(missing)。


28、请简述Unity3D下如何安全的在不同工程间迁移asset数据,请举出三种方法。

 

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

 

    2.导出包

 

    3.用Unity带的assets Server功能 

 


29、请简述MeshCollider和其他Collider的一个主要不同点。


30、当一个细小的高速运动的物体(如子弹)撞向另一个较大的物体时,可能出现什么
情况?如何避免?


31、请简述OnEnable,Aawake和Start在运行时的发生顺序。哪些可能在同一个对象的生
命期中发生。


32、请简述OnBecameVisible及OnBecameInvisible的发生时机,以及这一对回调方法的
意义。

 

  当renderer(渲染器)在任何相机上都不可见时调用:OnBecameInvisible 

 

  当renderer(渲染器)在任何相机上可见时调用:OnBecameVisible

 


33、请简述Unity3D如何获知场景中需要加载的数据。


34、请简述MeshRenderer中material和sharedmaterial的区别。

 


你可能感兴趣的:(Unity面试知识点)