前言:小弟收集了网上各大面试题进行了并按照它们出现的频率进行了整理,如果对你有所帮助,欢迎评论和点赞,感谢~
1.Unity3D的协程和C#线程之间的区别是什么?
协程:是一种特殊的函数,它可以暂停执行并在稍后继续执行。在Unity中,协程是一种可用于管理异步操作和时间相关任务的方法。协程可以使用yield语句来暂停执行,并在一段时间后恢复执行。这使得开发者可以更轻松地管理复杂的异步操作,如动画过渡和网络请求;
协程和线程的区别是:协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力。
补充:Unity中不支持多线程开发,但是却有并发的需求,使用协程来模拟多线程开发,即可并发(模拟),又可控制同步、防止阻塞。协程是Unity机制,不具备系统普遍性,只能在MonoBehaviour下启动。 协程和线程的定义、启动流程类似,但其内部实现原理与线程不同。
2.动态加载资源的方式?
1.Resources.Load();
2.AssetBundle
3.Unity提供了几种光源,分别是什么
四种。
平行光:Directional Light
点光源:Point Light
聚光灯:Spot Light
区域光源:Area Light
4.请简述GC(垃圾回收)产生的原因,并描述如何避免?
GC回收堆上的内存
避免:1.减少new产生对象的次数
2.使用公用的对象(静态成员)
3.将String换为StringBuilder
3.什么叫动态合批?跟静态合批有什么区别?
如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处理。动态批处理操作是自动完成的,并不需要你进行额外的操作。
区别:动态批处理一切都是自动的,不需要做任何操作,而且物体是可以移动的,但是限制很多。静态批处理:自由度很高,限制很少,缺点可能会占用更多的内存,而且经过静态批处理后的所有物体都不可以再移动了。
5.请写出求斐波那契数列任意一位的值得算法
递归实现:
int Fib1(int index)
{
if(index<1)
{
return -1;
}
if(index==1|| index==2)
{
return 1;
}
return Fib1(index-1)+Fib1(index-2);
}
迭代实现:
int Fib5(int index)
{
if(index<1)
{
return -1;
}
int a1 - 1, a2 = 1, a3 = 1;
for(int i = 0; i < index - 2; i++)
{
a3=a1+a2;
a1=a2;
a2=a3;
}
return a3;
}
6.顶点数和Draw Call数?如何降低Draw Call数?
Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call。DrawCall越高对显卡的消耗就越大。
降低DrawCall的方法:
· Dynamic Batching(动态批处理)
· Static Batching(静态批处理)
· 高级特性Shader降级为统一的低级特性的Shader
· 使用 LOD(细节层次),LOD 是一种常用的优化方法,可以根据物体的距离和大小选择合适的模型细节层次。在 Unity 中,可以使用 LODGroup 组件来实现。
· 合并网格和材质,一个常见的优化方法是合并网格和材质。通过将多个物体合并为一个网格,可以减少 Drawcall 的数量。
7.在移动设备上的一些优化资源的方法
1.使用assetbundle,实现资源分离和共享,将内存控制到200m之内,同时也可以实现资源的在线更新
2.顶点数对渲染无论是cpu还是gpu都是压力最大的贡献者,降低顶点数到8万以下,fps稳定到了30帧左右
3.只使用一盏动态光,不是用阴影,不使用光照探头
4.剪裁粒子系统
5.合并同时出现的粒子系统
6.自己实现轻量级的粒子系统
7.把不需要跟骨骼动画和动作过渡的地方全部使用animation,控制骨骼数量在30根以下
8.animator出视野不更新
9.删除无意义的animator
10.animator的初始化很耗时(粒子上能不能尽量不用animator)
11.除主角外都不要跟骨骼运动apply root motion
12.绝对禁止掉那些不带刚体带包围盒的物体(static collider )运动
NUGI的代码效率很差,基本上runtime的时候对cpu的贡献和render不相上下
13每帧递归的计算finalalpha改为只有初始化和变动时计算
14去掉法线计算
15不要每帧计算viewsize 和windowsize
16filldrawcall时构建顶点缓存使用array.copy
17.代码剪裁:使用strip level ,使用.net2.0 subset
18.尽量减少smooth group
19.给美术定一个严格的经过科学验证的美术标准,并在U3D里面配以相应的检查工具