unity3d试题.docx
《unity3d试题.docx》由会员分享,可在线阅读,更多相关《unity3d试题.docx(15页珍藏版)》请在冰豆网上搜索。
unity3d试题
unity3d
[填空题]
1C#中有哪些常用的容器类,各有什么特点。
参考答案:
L.ist,HashTable,Dictionary,Stack,Queue
L.ist:
索引泛型容器访问速度快修改速度慢
H.ashTable/Dictionary:
散列表格式查询效率高空间占用较大
S.tack:
后进先出
Q.ueue:
先进先出
[填空题]
2中国有句俗话“三天打鱼两天晒网”,某人从2000年1月1日起开始“三天打鱼两天晒网”,问这个人在今后的某天中“打鱼”还是”晒网”。
参考答案:
[填空题]
3当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?
如何避免?
参考答案:
穿透(碰撞检测失败)(碰撞体变大,FixedUpdate,代码限制)
[填空题]
4UI用的是NGUI还是UGUI?
参考答案:
两个都用过。
之前用的NGUI后来用了UGUI。
[单项选择题]
5、以下哪项技术不是目前Unity所支持的OcclusionCulling技术?
()
A.PVSonly
B.PVSanddynamicobjects
C.AutomaticPortalGeneration
D.DynamicOnly
参考答案:
D
[填空题]
6物体发生碰撞时,有几个阶段,分别对应的函数。
参考答案:
三个阶段,OnCollisionEnter/Stay/Exit函数
[填空题]
7localPosition与Position的使用区别?
参考答案:
LocalPosition:
自身位置,相对于父级的变换的位置。
Position:
在世界坐标transform的位置。
[单项选择题]
8、关于MonoBehavior.LateUpdate函数描述错误的是:
()
A.当MonoBehavior类型应用后,每帧调用一次
B.常被用于处理RigidBody的更新
C.在所有Update函数执行后才能被调用
D.常被用于实现跟随相机效果,且目标物体的位置已经在Update函数中被更新
参考答案:
B
[填空题]
9请简述一下对象池原理,什么情况下使用?
参考答案:
对象池背后的理念其实是非常简单的。
我们将对象存储在一个池子中,当需要时在再次使用,而不是每次都实例化一个新的对象。
池的最重要的特性,也就是对象池设计模式的本质是允许我们获取一个“新的”对象而不管它真的是一个新的对象还是循环使用的对象。
对象池通常用于在那些需要经常创建又销毁的对象比如我们场景中的小怪,经常需要创建和销毁,我们就可以在小怪销毁的时候,不真正的销毁而是,而是把它放入对象池中等到下一次我们需要创建小怪的时候,再从对象池中取出来。
[填空题]
10对unity的理解。
参考答案:
可以做VR、手游、工艺仿真、端游、页游跨平台的游戏引擎。
[填空题]
11对数据结构了解吗?
说说你常用的数据结构。
参考答案:
了解,数据结构是每个程序员都要会一点的。
链表、列表、散列表最常用,队列和栈也经常使用。
二叉树偶尔使用。
[填空题]
12热更新的解决方案(资源以及代码)。
参考答案:
ulua框架、simpleFramework框架、bundlemanager插件
[填空题]
13如何实现背包系统、宠物系统、装备系统的实时更新?
参考答案:
NGUI做界面,使用ulua做热更新。
之前公司使用的是SimpleFramework这样的框架。
[填空题]
14请简述在客户端开发方面你最擅长的模块系统,以及你觉得哪些模块会出现的问题。
参考答案:
擅长UI模块的制作,我认为热更新模块会出现问题,比如资源依赖不合理,导致资源包过大。
[填空题]
15用过什么传输协议,用什么语言?
参考答案:
http,tcp(socket)都是C#语言编写。
[填空题]
16模型导入Unity后怎么与数据库产生联系?
类似打通程序和数据库通道。
参考答案:
例如mysql数据库,需要导入两个文件,就可以通过sql语句往数据库写数据,数据可以是模型信息。
[填空题]
17用过什么游戏框架?
参考答案:
SimpleFramework,基于ulua的框架,支持ugui和ngui的热更新。
[填空题]
18怎样实现植物的弯曲?
参考答案:
1、max做骨骼动画
2、修改Tree组件的GrowthAngle的值
[填空题]
19项目问题,和美工想法冲突了怎么办?
参考答案:
找项目主管协调处理。
[填空题]
20原公司服务器怎么实现多人在线?
参考答案:
使用socket基于TCP协议开发的多人在线。
公司有自行开发的服务端程序。
[填空题]
21公司内部信息传递用的什么安全协议?
参考答案:
1、公司自定义的安全协议或者基于SSL/TLS协议或者SSH协议
2、我们至少调用基于相关协议的SDK
3、SSL/TLS协议
SSL/TLS协议(RFC2246RFC4346)处于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
从协议内部的功能层面上来看,SSL/TLS协议可分为两层:
1.SSL/TLS记录协议(SSL/TLSRecordProtocol),它建立在可靠的传输层协议(如TCP)之上,为上层协议提供数据封装、压缩、加密等基本功能。
2.SSL/TLS握手协议(SSL/TLSHandshakeProtocol),它建立在SSL/TLS记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等初始化协商功能。
S.SH是英文SecureShell的简写形式。
通过使用SSH,你可以把所有传输的数据进行加密,这样”中间人”这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。
使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。
SSH有很多功能,它既可以代替Telnet,又可以为FTP、Pop、甚至为PPP提供一个安全的”通道”。
更多内容请访问《睦霖题库》微信公众号
[填空题]
22了解代码管理么?
在开发中使用什么代码管理工具?
使用的接口多一点还是继承多一点?
参考答案:
了解。
使用SVN进行代码管理。
接口多一点。
[填空题]
23会做数据库吗?
有嵌套的数据库能做么?
参考答案:
会。
用过关系型数据库mysql。
能做,只是这方面之前在公司没怎么负责这块,有些生疏,稍微熟悉一下就能做。
[填空题]
24谈谈你们公司的网络编程。
参考答案:
在我们公司基本是由服务端人员开发的,我这边只调用他们提供的客户端SDK和服务器端通信。
服务器端是公司用C++自行研发的。
[填空题]
25你对跨平台的了解。
参考答案:
跨平台就是在一个熟悉的平台上面开发的软件或者程序,直接可以在其他平台上正常的运行显示而不需要对其原始文件或者原始代码进行修改。
[填空题]
26怎样反外挂?
对外挂的看法。
参考答案:
游戏外挂的原理:
外挂分为多种,比如模拟键盘的,鼠标的;修改数据包的;修改本地内存的。
1、对于模拟用户的鼠标键盘输入的外挂,我们可以用网页上常用的验证码的方式来对付。
模拟键盘鼠标的外挂对游戏的影响比加速、修改封包、修改内存、脱机等要小得多,因此被一些人称为绿色外挂。
2、让服务器不把在正常情况下玩家看不到的东西的数据传送给客户端。
3、把玩家操作记录发到服务器进行模拟,如果和客户端的计算结果偏差较大可以认为作弊。
[填空题]
27如何处理网络异常下的可玩性?
参考答案:
1、为游戏增加单机模式:
比如故事模块,网络异常时可以阅读游戏的故事;丰富的技能或卡牌,网络异常时可以了解技能和卡牌;提供单机玩法,玩家可以与AI进行游戏等。
2、为游戏提供教程模块,网络异常时可以学习游戏技巧。
[填空题]
28如何与服务器交互?
参考答案:
做游戏,基本上都避免不了与服务器端交互,与服务器端交互的方式也有几种,总结起来就是长连接模式(Socket)与短链接模式(Http)。
[填空题]
29背包系统中只有20个格子,现在有总共有100个物体,除了显示在视野中的20个外,对其他的处理方法?
(注:
将其他隐藏起来不可行,对象池得有具体的说明)
参考答案:
1.每个滚动条目都是同一个预设体的实例
2.做缓存,只要实例化视野范围内滚动条目,往上超出视野部分,自动填补到视野的下面
[填空题]
30Unity资源加载的有几种方式,简述assetbundie。
参考答案:
1.直接在脚本中public一个对象,然后在监视器面板进行赋值。
2.直接在程序中进行find查找。
3.Resource.load。
4.把资源打成Assetbudle,然后用的时候load进来。
A.ssetbundle就是对资源的打包处理,同时这种资源格式便于从互联网上下载。
[填空题]
31如何解决过多创建和删除对象带来的卡顿问题?
参考答案:
对象池,把不用对象缓存到一个对象列表中。
[填空题]
32使用NGUI开发滚动视图,当滚动列表达到几百条的时候,如何才能保证界面的滚动流畅运行?
参考答案:
1.每个滚动条目都是同一个预设体的实例。
2.做缓存,只要实例化视野范围内滚动条目,往上超出视野部分,自动填补到视野的下面。
[填空题]
33你认为unity在开发过程中哪些地方比较容易造成内存泄漏和内存泄漏问题?
如何避免?
参考答案:
脚本做载入不删除处理时,往往脚本中还有一些不用的变量,容易导致内容泄漏。
[填空题]
34Unity内存优化?
参考答案:
GC垃圾回收
[填空题]
35使用mipmap有什么好处?
什么情况下使用?
参考答案:
Mipmap纹理技术是目前解决纹理分辨率与视点距离关系的最有效途径,它会先将图片压缩成很多逐渐缩小的图片,例如一张64*64的图片,会产生64*64,32*32,16*16,8*8,4*4,2*2,1*1的7张图片,当屏幕上需要绘制像素点为20*20时,程序只是利用32*32和16*16这两张图片来计算出即将显示为20*20大小的一个图片,这比单独利用32*32的那张原始片计算出来的图片效果要好得多,速度也更快。
[填空题]
36动态加载资源的方式和区别。
参考答案:
1.通过Resources模块,调用它的load函数:
可以直接load并返回某个类型的Object,前提是要把这个资源放在Resource命名的文件夹下,Unity不关有没有场景引用,都会将其全部打入到安装包中。
Resources.Load();
2.通过bundle的形式:
即将资源打成assetbundle放在服务器或本地磁盘,然后使用WWW模块get下来,然后从这个bundle中load某个object。
A.ssetBundle
3.通过AssetDatabase.loadasset:
这种方式只在editor范围内有效,游戏运行时没有这个函数,它通常是在开发中调试用的【AssetDatabase资源数据库】
区别:
Resources的方式需要把所有资源全部打入安装包,这对游戏的分包发布(微端)和版本升级(patch)是不利的,所以unity推荐的方式是不用它,都用bundle的方式替代,把资源达成几个小的bundle,用哪个就load哪个,这样还能分包发布和patch,但是在开发过程中,不可能没更新一个资源就打一次bundle,所以editor环境下可以使用AssetDatabase来模拟,这通常需要我们封装一个dynamicresource的loader模块,在不同的环境下做不同实现。
动态资源的存放
有时我需要存放一些自己的文件在磁盘上,例如我想把几个bundle放在初始的安装里,unity有一个streamingasset的概念,用于提供存储接口的访问。
我们需要在编辑器建立一个StreamingAssets名字的文件夹,把需要我们放在客户磁盘上的动态文件放在这个文件夹下面,这样安装后,这些文件会放在用户磁盘的指定位置,这个位置可以通过Application.streamingAssetsPath来得到。
[填空题]
37如何优化内存?
参考答案:
有很多种方式,例如
1.压缩自带类库;
2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;
3.释放AssetBundle占用的资源;
4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;
5.使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。
[填空题]
38当游戏中需要频繁创建一个物体对象时,我们需要怎么做来节省内存。
参考答案:
做一个pool,游戏开始时预先实例化足够的数量,然后用的时候取不用的时候收回。
[填空题]
39MipMap是什么?
作用?
参考答案:
在三维计算机图形的贴图渲染中有一个常用的技术被称为Mipmapping。
为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为MIPmap或者mipmap。
[填空题]
40lod是什么,优缺点是什么?
参考答案:
LOD技术即LevelsofDetail的简称,意为多细节层次。
LOD技术指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
优点:
可根据距离动态地选择渲染不同细节的模型。
缺点:
加重美工的负担,要准备不同细节的同一模型,同样的会稍微增加游戏的容量。
[填空题]
413D空间有三个cube当做点,有一条鱼的模型,要求在三点之间游动,要求转向平滑一点,控制鱼的运动朝向(用四元数和欧拉角)。
参考答案:
使用transform.localRotation=Quaternion.Slerp(Quaterniona,Quaternionb,floatc)实现物体平滑转向。
[填空题]
42敌人AI,有各种状态,实现各种状态之间的切换。
参考答案:
通过状态机来实现各种状态之间的切换。
[填空题]
43写一个角色控制器,鼠标控制屏幕晃动,鼠标控制开枪。
参考答案:
[填空题]
44如何检测物体是否被其他对象遮挡?
参考答案:
使用射线进行检测。
[填空题]
45ScriptObject的作用和使用方式。
参考答案:
ScriptObject类型经常使用于存储一些Unity本身不可以打包的一些object,比如字符串,一些类对象,用这个类型的子类型可以用BuildPipeline打包成assetbundle包共后续使用,非常方便。
[填空题]
46Unity中如何派发事件(消息)?
参考答案:
在脚本里的Update函数里调用EventDispatcher.Instance().OnTick();就可以了。
[填空题]
47Unity中销毁GameObject的方式,简述Destroy和DestroyImmediate的区别。
参考答案:
Destroy销毁场景中的物体,但是内存中它还是存在的,只有当内存不够时,机制才会将它销毁并释放内存。
而DestroyImmediate会立即将对象销毁,并且将内存释放。
[填空题]
48正确排列出下面Unity脚本自带的函数执行顺序Start,Awake,Update,OnUpdate,OnEnable,FixedUpdate,OnGUI,LateUpdate、OnDisable、OnDestory
参考答案:
Awake-->OnEnable-->Start-->Update-->FixedUpdate-->LateUpdate-->OnGUI-->OnDisable-->OnDestory
[单项选择题]
49、采用Input.mousePosition来获取鼠标在屏幕上的位置,以下表述正确的是:
()
A.左上角为原点(0,0),右下角为(Screen.Width,Screen.Height)
B.左下角为原点(0,0),右上角为(Screen.Height,Screen.Width)
C.左下角为原点(0,0),右上角为(Screen.Width,Screen.Height)
D.左上角为原点(0,0),右下角为(Screen.Height,Screen.Height)
参考答案:
B
[单项选择题]
50、以下关于MonoBehaviour.OnGUI()的描述的是:
()
A.如果MonoBehaviour没有被启用,则OnGUI函数不会被调用
B.用于绘制和处理GUIevents
C.每帧可能会被绘制多次,每次对应于一个GUIevent
D.每帧被调用一次
参考答案:
D
[单项选择题]
51、启用MipMaps对内存的影响是?
()
A.增加约33%的内存
B.减少约33%的内存
C.增加约25%的内存
D.减少约25%的内存
参考答案:
A
[单项选择题]
52、某个GameObject有一个名为MyScript的脚本,该脚本中有一个名为DoSomething的函数,则如何在该GameObject的另一个脚本中国调用该函数?
()
A.
B.
C.
D.
参考答案:
A
[单项选择题]
53、以下哪个函数在游戏进入新场景后会被马上调用?
()
A.MonoBehaviour.OnSceneWasLoaded
B.MonoBehaviour.OnSceneEnter
C.MonoBehaviour.OnLevelWasLoaded
D.MonoBehaviour.OnLevelEnter
参考答案:
C
[单项选择题]
54、以下关于WWW.LoadFromCacheOrDownload描述正确的是:
()
A.可被用于将TextAssets自动缓存到本地磁盘
B.可被用于将Resource自动缓存到本地磁盘
C.可被用于将AssetsBundles自动缓存到本地磁盘
D.可被用于将任意的Unity资源文件自动缓存到本地磁盘
参考答案:
C
[填空题]
55空间内一物体绕球面固定点(0、1、2)按照固定速度speed环绕运动。
参考答案:
[填空题]
56Unity3d中resources目录一般用来放些什么,打包的时候会有什么影响?
参考答案:
resource一般用来放置一些需要动态加载的资源,打包程序的时候会将Resource目录下的全部文件都加密压缩打进包内,这样再想使用assetbundle方式打小包的话就不行了。
[填空题]
57unity3D从唤醒到销毁有一段生命周期,列出系统自己调用的重要方法。
参考答案:
Awake()
OnEnable()
Start()
FixedUpdate()
OnTriggerXXX(Colliderother)
OnCollisionXXX(CollisioncollisionInfo)
Update()
LateUpdate()
OnGUI()
OnDisable()
OnDestroy()
[填空题]
58去掉敏感字的程序(手写程序)。
参考答案:
[填空题]
59如何使子控件居中,如果使用UGUI怎么实现?
参考答案:
设置子控件锚点为中心。
[填空题]
60NGUI:
把子控件放在父控件里面,如何上下边距都是10。
参考答案:
给子控件设置上下两个锚点为10。