unity面试问题收集

这篇博客整理了Unity面试中常见的问题,包括Animation与Animator组件的区别、DrawCall优化、资源管理和移动设备上的性能优化策略,如AssetBundle、粒子系统优化、 Animator效率问题以及内存管理等。此外,还涉及到Unity的渲染管道、碰撞检测、光源类型、多线程限制、UI适配、游戏对象生命周期、物理系统、字符串处理与数据结构等多个技术点。
摘要由CSDN通过智能技术生成

unity老版本只有Animation组件,后来版本增添了Animator,如果只是控制一个动画的播放我们则用Animation,如果需要多个动画之间的互相转换,我们则使用Adminitor组件,它们之间的区别是Animator有一个动画控制器,使用它来进行动画切换是非常方便的,但是缺点是占用的内存比Animation组件大

什么是DrawCall?DrawCall高了又什么影响?如何降低DrawCall?
Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call。DrawCall越高对显卡的消耗就越大。降低DrawCall的方法:

  1. Dynamic Batching//动态批处理
  2. Static Batching//静态批处理
  3. 高级特性Shader降级为统一的低级特性的Shader。
  4. https://blog.csdn.net/u3d_ysj/article/details/47906035

UNITY3d在移动设备上的一些优化资源的方法
1.使用assetbundle,实现资源分离和共享,将内存控制到200m之内,同时也可以实现资源的在线更新
2.顶点数对渲染无论是cpu还是gpu都是压力最大的贡献者,降低顶点数到8万以下,fps稳定到了30帧左右
3.只使用一盏动态光,不是用阴影,不使用光照探头
粒子系统是cpu上的大头
4.剪裁粒子系统
5.合并同时出现的粒子系统
6.自己实现轻量级的粒子系统
animator也是一个效率奇差的地方
7.把不需要跟骨骼动画和动作过渡的地方全部使用animation,控制骨骼数量在30根以下
8.animator出视野不更新
9.删除无意义的animator
10.animator的初始化很耗时(粒子上能不能尽量不用animator)
11.除主角外都不要跟骨骼运动apply root motion
12.绝对禁止掉那些不带刚体带包围盒的物体(static collider )运动
NGUI的代码效率很差,基本上runtime的时候对cpu的贡献和render不相上下
13每帧递归的计算finalalpha改为只有初始化和变动时计算
14去掉法线计算
15不要每帧计算viewsize 和windowsize
16filldrawcall时构建顶点缓存使用array.copy
17.代码剪裁:使用strip level ,使用.net2.0 subset
18.尽量减少smooth group
19.给美术定一个严格的经过科学验证的美术标准,并在U3D里面配以相应的检查工具

1.assetbundle实现资源的分离和共享,将内存控制在200m以内,同时实现资源的在线更新。
2.降低顶点数
3.只使用一盏动态灯,不使用阴影
4.裁剪粒子系统,合并同时出现的粒子系统,自己实现轻量级的粒子系统
5.如果可以用animation代替animator的地方尽量代替,animator出了视野不更新,删除无意义的animator,粒子尽量不要用animator
6.去掉法线计算
7.不要每帧计算viewsize和windowsize

七层协议:
最下面一层是物理层,关心的是接口,信号,和介质,只是说明标准,如EIA-232接口,以太网,fddi令牌环网
第二层是数据链路层:一类是局域网中数据连路层协议:MAC子层协议,有LLC子层协议.另一类是广域网的协议如:HDLC,PPP,SLIP.
第三层是网络层:主要是IP协议.
第四层是传输层:主要是面向连接的TCP传输控制协议.另一个是不面向连接的UDP用户数据报协议
第五层是会话层:主要是解决一个会话的开始进行和结束.(真的想不起有什么协议)
第六层是表示层:主要是编码如ASⅡ
第七层是应用层,就是应用程序里面的拉,文件传输协议FTP、电子邮件传输协议SMTP、域名系统服务DNS、网络新闻传输协议NNTP和HTTP协议等。 HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是用于从WWW服务…

客户端与服务器交互方式有几种?
socket通常也称作”套接字”,实现服务器和客户端之间的物理连接,并进行数据传输,主要有UDP和TCP两个协议。Socket处于网络协议的传输层。
http协议传输的主要有http协议 和基于http协议的Soap协议(web service),常见的方式是 http 的post 和get 请求,web 服务。

概述c#中委托和事件?
委托就是用来定义指向方法的引用。
C#事件本质就是对消息的封装,用作对象之间的通信;发送方叫事件发送器,接收方叫事件接收器
http://www.tracefact.net/tech/009.html

Heap与Stack有何区别?
1.heap是堆,stack是栈。
2.stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,heap常用new关键字来分配。
3.stack空间有限,heap的空间是很大的自由区。

Unity3D Shader分哪几种,有什么区别?
表面着色器Surface Shader的抽象层次比较高,它可以轻松地以简洁方式实现复杂着色。表面着色器可同时在前向渲染及延迟渲染模式下正常工作。
顶点片元着色器Vertex/Fragment Shader可以非常灵活地实现需要的效果,但是需要编写更多的代码,并且很难与Unity的渲染管线完美集成。
固定功能管线着色器Fixed Function Shader可以作为前两种着色器的备用选择,当硬件无法运行那些酷炫Shader的时,还可以通过固定功能管线着色器来绘制出一些基本的内容。

foreach是只读的。不能一边遍历一边修改。

C#的委托是什么?有何用处?
委托类似于一种安全的指针引用,在使用它时是当做类来看待而不是一个方法,相当于对一组方法的列表的引用。用处:使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。

什么是渲染管道?
渲染管道就是显示器为了显示图像而进行的一系列必要的操作。在渲染管道中,这些操作很多都是从一个坐标系转换到另一个坐标系。大概可以分为以下的流程:本地坐标-》视图坐标-》背面裁剪-》光照-》裁剪-》投影-》视图变换-》光栅化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值