自己总结的unity高频面试题 自己总结的unity高频面试题(1)

一.接口和抽象类的区别:

1.抽象类可以有构造方法,接口中不能有构造方法;

2.抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能public static final类型,并且默认即为public static final类型

3.一个类可以实现多个接口,但只能继承一个抽象类;

4.抽象类可以包含静态方法,接口中不能包含静态方法

5.接口不能包含字段,抽象类可以有字段。

6.实现接口的时候必须要实现接口中的所有的方法,不能遗漏任何一个。

二:堆和栈的区别:

1.栈区(stack):由编译器自动分配释放。

2.堆区(heap):一般由程序员分配释放,会产生gc回收。

3.栈顶的地址和栈的最大容量是系统预先规定好的,如果申请的空间超过栈的剩余空间时,会报overflow溢出的错误;而堆是不连续的内存区域,是由系统用链表来存储的空闲内存地址的,堆的大小跟计算机系统中有效的虚拟内存。

三:四元数和欧拉角的区别:

欧拉角的任意一个角度可以有很多种表示,会造成万向锁的现象,而四元数只有一种表示;例如:使用欧拉角的时候0°和360°以及-360°都是一样的

四:向量的点乘、叉乘以及归一化的意义?

答:

1)点乘描述了两个向量的相似程度,结果越大两向量越相似,还可表示投影;角度越小,cos的值越大

2)叉乘得到的向量垂直于原来的两个向量所形成的平面

3)标准化向量:用在只关系方向,不关心大小的时候

五:重载和override的区别:

Overload:重载就是在同一个类中,方法名相同,参数列表不同。参数列表不同包括:参数的个数不同,参数类型不同等。

override:说的是两个类继承,子类重写父类的方法,在调用的时候,子类的方法会覆盖父类的方法,也就是会调用子类的方法。在父类中的方法必须有修饰符virtual,而在子类的方法中必须指明override。(方法名称必须相同,参数也要相同)

六:如何优化内存:

1.精灵压缩

2.使用ObjectPool对象池将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;

3.释放AssetBundle占用的资源;

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

5.使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。

6.动态批处理,静态批处理;

7.遮挡剔除处理;

,