Unity笔试题【20180913】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/itsxwz/article/details/82682766

写业务代码之余,做做面试题。有错漏的地方,欢迎指正。

1.下面的C#编写的代码片段有什么问题?

int[] a = new int[128];
foreach(int aa in a)
{
	foreach(int bb in a)
	{
		foreach(int cc in a)
		{
			cc = 0;
		}
	}
}

答:1、外面的两层foreach循环多余;2、最里层的foreach循环,不能再循环里面更改变量的值。

2.物体发生碰撞的必要条件?
答:两个物体都必须带有collider,且其中一个必须有RigidBody。

3.Unity3D是否支持写成多线程程序?如果支持的话需要注意什么?
答:支持。如果处理事情多或者对象互动小,用Thread;否则用Coroutine。
lock关键字保证只有一个线程可以在特定时间访问特定对象。

4.请简述如何在不同分辨率下保持UI的一致性?
答:计算出设备的宽高比和预设的屏幕分辨率的比值,修改摄像机的match size。

5.使用mipmap有什么好处和坏处,什么情况下使用?
答:好处:降低现存带宽占用,提升渲染性能,减少远处因为分辨率较大的纹理过分缩小而产生的失真。坏处:内存占用变大,某些情况下导致远处贴图模糊。解决纹理分辨率与视点距离关系的最有效途径。

6.叙述一下Unity3D中的drawcall合并?
答:有两种合并方法:静态和动态。勾选static选项的物体系统强制静态合并;非static物体在材质相同的情况下系统自动动态合并。

7.如何优化内存?
答:1、压缩自带类库;2、暂时不用的物体先隐藏而不是直接销毁;3、释放AssetBundle占用的资源;4、降低模型片数、面数、骨骼数、贴图大小;5、使用光照贴图、LOD、shader、Prefab。

8.对象池的原理?你觉得在游戏里哪些东西适合使用对象池?
答:将对象存储在一块预先划出的内存区域,需要时取出使用。在获取大量同类对象时可以使用对象池:子弹。

9.请简述GC(垃圾回收)产生的原因,并描述如何避免?
答:当可分配内存不足时,GC就会去回收未使用的对象。避免:1、减少new的次数;2、使用公用对象,但不能乱用;3、拼接大量字符串用StringBuilder(创建StringBuilder对象要设置初始大小);4、使用对象池

10.Vertex Shader是什么,怎么计算?
答:顶点着色器。对输入顶点完成从本地空间到齐次空间的变换过程。

11.在塔防游戏中,如何让塔指向进入攻击范围的敌人并射击?请简述程序流程?
答:敌人进入塔的攻击范围后:1、让发射口指向从发射口到敌人的方向;2、获取当前塔发射的炮弹类型;3、发射炮弹

猜你喜欢

转载自blog.csdn.net/itsxwz/article/details/82682766