logo资料库

Unity面试题加强版.docx

第1页 / 共32页
第2页 / 共32页
第3页 / 共32页
第4页 / 共32页
第5页 / 共32页
第6页 / 共32页
第7页 / 共32页
第8页 / 共32页
资料共32页,剩余部分请下载后查看
一、Unity脚本基础
1.Unity3D中的协程(coroutine)和C#线程之间的区别是什么?
2.简述 Unity3D 支持的作为脚本的语言的名称
3.Unity3D 是否支持写成多线程程序?如果支持的话需要注意什么?
4.支持:如果同时你要处理很多事情或者与 Unity 的对象互动小可以用 thread,否则使用coro
5.OnEnable、Awake、Start 运行时的发生顺序?哪些可能在同一个对象周期中反复的发生?
6.请简述 OnBecameVisible 及 OnBecameInvisible 的发生时机,以及这一
7.Unity3D 如何获知场景中需要加载的数据?
8.物体发生碰撞时,有几个阶段,分别对应的函数
9.u3d 中,几种施加力的方式,描述出来
10.物体自旋转使用的函数叫什么
11.物体绕某点旋转使用函数叫什么
12.u3d 提供了一个用于保存读取数据的类,(playerPrefs),请列出保存读取整形数据的函数
13.unity3d 从唤醒到销毁有一段生命周期,请列出系统自己调用的几个重要方法。
14.物理更新一般在哪个系统函数里?
15.移动相机动作在哪个函数里,为什么在这个函数里。
16.为什么 u3d 会出现组件上数据丢失的情况
17.什么是协同程序?
18.反向旋转动画的方法是什么?
19.用代码实现第三角色控制器
20.实现吊机吊物体的功能
21.获取、增加、删除组件的命令分别是什么
22.Animation.CrossFade 命令作用是:C
23.Application.loadLevel 命令为:A
24.调试记录到控制台的命令是什么?
25.编辑器类存放路径是什么?
26.使用原生 GUI 创建一个可以拖动的窗口命令是什么?
27.localPosition 与 Position 的使用区别?
28.含义Mathf.Round, Mathf.Clamp, Mathf.Lerp
29.写一个计时器工具,从整点开始计时,格式为:00:00:00
30.写出 Animation 的五个方法
31.用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放(用一个 Cube 即可)。
32.NGUI Button 怎样接受用户点击并调用函数,具体方法名称是什么
33.<愤怒的小鸟>给予初速度以后,怎么让小鸟受到重力和空气阻力的影响而绘制抛物线轨迹,说出具体的计算方法
34.当游戏中需要频繁创建一个物体时,我们需要怎样做能够节省内存?
35.碰撞检测需要物体具备什么属性?
36.Vector3.forward与Vector3(0,0,1)是一样的意思对吗?
37.下哪个函数在游戏进入新场景后会被马上调用?
38.itween 插件的作用是什么,itween 作用于世界坐标还是局部坐标,请列举出 3 个其常用方法
39.U3D 中用于记录节点空间几何信息的组件名称,及其父类名称
40.NGUI:把子控件放在父控件里面,如何上下边距都是10。
41.如何使子控件居中,如果使用UGUI怎么实现
42.去掉敏感字的程序(手写程序)
43.unity3D从唤醒到销毁有一段生命周期,列出系统自己调用的重要方法。
44.Unity3d中resources目录一般用来放些什么,打包的时候会有什么影响?
45.空间内一物体绕球面固定点(0、1、2)按照固定速度speed环绕运动。
46.以下关于WWW.LoadFromCacheOrDownload描述正确的是: C
47.以下哪个函数在游戏进入新场景后会被马上调用? C
48.关于MonoBehavior.LateUpdate函数描述错误的是: B
49.某个GameObject有一个名为MyScript的脚本,该脚本中有一个名为DoSomething的
50.启用MipMaps对内存的影响是? A
51.以下关于MonoBehaviour.OnGUI()的描述的是: D
52.采用Input.mousePosition来获取鼠标在屏幕上的位置,以下表述正确的是: B
53.正确排列出下面Unity脚本自带的函数执行顺序Start,Awake,Update,OnUpdate
54.Unity中销毁GameObject的方式,简述Destroy和DestroyImmediate的区
55.Unity中如何派发事件(消息)
56.ScriptObject的作用和使用方式
57.如何检测物体是否被其他对象遮挡
58.写一个角色控制器,鼠标控制屏幕晃动,鼠标控制开枪。
59.敌人AI,有各种状态,实现各种状态之间的切换。
60.1.写一个角色控制器,鼠标控制屏幕晃动,鼠标控制开枪。
61.3D空间有三个cube当做点,有一条鱼的模型,要求在三点之间游动,要求转向平滑一点,控制鱼的运动朝向
二、服务器数据库等杂项
62.Unity 连接数据库
63.如何与服务器交互
64.如何处理网络异常下的可玩性
65.怎样反外挂? 对外挂的看法
66.你对跨平台的了解。
67.谈谈你们公司的网络编程
68.会做数据库吗?有嵌套的数据库能做么?
69.了解代码管理么?在开发中使用什么代码管理工具?使用的接口多一点还是继承多一点?
70.公司内部信息传递用的什么安全协议?
71.原公司服务器怎么实现多人在线?
72.项目问题,和美工想法冲突了怎么办?
73.对unity的理解
74.面试题:VR相关问题用了哪些设备?接入了哪些SDK?根据项目问如何实现手势控制?
75.开过什么平台?多线程的理解
76.怎样实现植物的弯曲
77.用过什么游戏框架?
78.模型导入Unity后怎么与数据库产生联系?类似打通程序和数据库通道
79.用过什么传输协议,用什么语言
80.都在什么平台上开发过游戏或软件用的什么框架
81.会写框架么
82.请简述在客户端开发方面 你最擅长的模块系统,以及你觉得哪些模块会出现的问题
83.如何实现背包系统、宠物系统、装备系统的实时更新?
84.热更新的解决方案(资源以及代码)
三、数据结构算法相关
85.对数据结构了解吗?说说你常用的数据结构。
86.什么是状态机,什么是行为树
87.对List的理解
88.数组和List的核心区别
89.数据结构的看法
90.深度优化会么
91.实现二分要什么条件
92.c++,socket网络编程会不会
93.二叉树的所有遍历方式的原理及优缺点
94.数据结构中数组和链表各有什么特点,什么场合下应该使用数组,什么场合下应该使用链表
四、设计模式相关
95.用过哪些设计模式?谈谈自己比较熟悉的设计模式
96.请说出 4 种面向对象的设计原则,并分别简述它们的含义。
97.设计一个状态机类型,状态值为int类型,要求:
98.如何处理unity中界面资源,界面逻辑以及功能模块三者之间耦合关系
99.观察者模式的深入理解?
100.MVC模式
五、图形学相关
101.简述四元数的作用,四元数对欧拉角的优点?
102.向量的点乘、叉乘以及归一化的意义?
103.矩阵相乘的意义及注意点
104.alpha blend 工作原理
105.写光照计算中的 diffuse 的计算公式
106.两种阴影判断的方法工作原理
107.Vertex Shader 是什么?怎么计算?
108.什么是渲染管道?
109.怎么判断两个平面是否相交?不能用碰撞体,说出计算方法
110.法线贴图 、CG 动画
111.什么是局部坐标,什么是世界坐标?
112.请描述 MeshRender 中 material 和 shader 的区别?
113.什么是矢量图
114.四元组是什么?
115.你对你的数学知识感觉如何?比如空间向量,图形学
116.会写shader么
117.3D基础相关
118.什么是投影矩阵
119.什么是UV
120.Cullback,cullfront,culloff区别
121.什么是顶点程序和片段程序
122.如何实现以下人物在树丛中部分透明效果?
123.简述lightmap的使用
124.Shader的代码实现?大概写一下
125.游戏中要怎么实现矩阵相乘?
六、逻辑题
126.也许是因为我太善良,我上的当是要比别人多一些。D
127.现在生活中老实人总是吃亏。D
128.社会上很多不法分子逍遥法外 D
129.如果我家很小,如带客人来家我会有伤自尊 D
130.我多数娱乐活动都是和学生一起进行的 A
131.如果有件小事(如头痛或家务事),使我感到烦恼时,我会向别人倾诉 C
132.根据如下图形中的规律,问号代表下列哪个方块? A
133.观察数字:54321,43215,32154,(),15432,第四个数字是多少?
134.在下列分数中,选出不同类的一项: C 可以约分
135.小赵的店里来了一位顾客,挑了20元的货,顾客拿出50元,小赵没有零钱找不开,就到隔壁小韩的店里把这5
136.观察3、3、8、8这一组数字,不改变数字顺序,加入运算符号和括号,将这些数字组成一个算式,使结果等于
137.图形共有2000个,按照下面的规律排列: △□□□△□□□△□□□……第1995个图形是什么?
138.用三根火柴要摆成一个最小的数(不许把火柴折断或者弯曲),这个数是什么?
140.说一个岛上有100个人,其中5个红眼睛,95个蓝眼睛。这个岛上有三个奇怪的宗教规则。
141.有4位好友,其中一个人干了一件好事,不留名,记者来查此事,问4位,他们的回答如下:
一、 Unity 脚本基础 1. Unity3D 中的协程(coroutine)和 C#线程之间的区别是什么? (1)多线程程序同时运行多个线程 ,而在任一指定时刻只有一个协程在运行,并且这个正在运行的协 同程序只在必要时才被挂起。 (2)除主线程之外的线程无法访问 Unity3D 的对象、组件、方法。 (3 )Unity3d 没 有 多 线 程 的 概 念 , 不 过 unity 也 给 我 们 提 供 了 StartCoroutine ( 协 同 程 序 ) 和 LoadLevelAsync(异步加载关卡)后台加载场景的方法。 (4)StartCoroutine 为什么叫协同程序呢,所谓协同,就是当你在 StartCoroutine 的函数体里处理一段 代 码时 ,利 用 yield 语 句等 待执 行结 果, 这期 间不 影响 主 程序 的继 续执 行, 可以 协同 工作 。 而 LoadLevelAsync 则允许你在后台加载新资源和场景,所以再利用协同,你就可以前台用 loading 条或动 画提示玩家游戏未卡死,同时后台协同处理加载的事宜 2. 简述 Unity3D 支持的作为脚本的语言的名称 Unity 的脚本语言基于 Mono 的.Net 平台上运行,可以使用.NET 库,这也为 XML、数据库、正则表达 式等问题提供了很好的解决方案。 Unity 里的脚本都会经过编译,他们的运行速度也很快。这三种语言实际上的功能和运行速度是一样的, 区别主要体现在语言特性上。 JavaScript:和网页中常用的 JavaScript 不一样,它编译后的运行速度很快,语法方面也会有不少区别。 C# Boo:可以看做是 Python 语言的变种,又糅合了 Ruby 和 C#的特性,它是静态类型语言 3. Unity3D 是否支持写成多线程程序?如果支持的话需要注意什么? 仅能从主线程中访问 Unity3D 的组件,对象和 Unity3D 系统调用 4. 支 持: 如 果 同时 你 要 处理 很 多 事情 或 者 与 Unity 的 对象 互 动 小可 以 用 thread,否则使用 coroutine。 注意:C#中有 lock 这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象 5. OnEnable、Awake、Start 运行时的发生顺序?哪些可能在同一个对象周期 中反复的发生? Awake -》OnEnable-》Start OnEnable 在同一周期中可以反复地发生
6. 请简述 OnBecameVisible 及 OnBecameInvisible 的发生时机,以及这一 对回调函数的意义? 当物体是否可见切换之时。可以用于只需要在物体可见时才进行的计算。 7. Unity3D 如何获知场景中需要加载的数据? Resource.Load AssetBundle.Load 8. 物体发生碰撞时,有几个阶段,分别对应的函数 三个阶段,OnCollisionEnter/Stay/Exit 函数 9. u3d 中,几种施加力的方式,描述出来 rigidbody.AddForce/AddForceAtPosition,都是 rigidbody 的成员函数 10.物体自旋转使用的函数叫什么 transform.Rotate 11.物体绕某点旋转使用函数叫什么 transform.RotateAround 12.u3d 提供了一个用于保存读取数据的类,(playerPrefs),请列出保存读取整 形数据的函数 PlayerPrefs.SetInt 与 PlayerPrefs.GetInt 13.unity3d 从唤醒到销毁有一段生命周期,请列出系统自己调用的几个重要方 法。 Awake – >OnEnable – > Start – > Update – > FixedUpdate – > LateUpdate – >OnGUI –> Reset –> OnDisable –> OnDestroy
14.物理更新一般在哪个系统函数里? FixedUpdate,每固定帧绘制时执行一次,和 update 不同的是 FixedUpdate 是渲染帧执行,如果你的 渲染效率低下的时候 FixedUpdate 调用次数就会跟着下降。FixedUpdate 比较适用于物理引擎的计算, 因为是跟每帧渲染有关。Update 就比较适合做控制。 15.移动相机动作在哪个函数里,为什么在这个函数里。 LateUpdate,,是在所有 update 结束后才调,比较适合用于命令脚本的执行。官网上例子是摄像机的跟 随,都是在所有 update 操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未 有角色的空帧出现。 16.为什么 u3d 会出现组件上数据丢失的情况 一般是组件上绑定的物体对象被删除了 17.什么是协同程序? 在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个 线程。可以用来控制运动、序列以及对象的行为。 18.反向旋转动画的方法是什么? 反转动画,讲动画的速度调到-1,碰撞时,被碰撞物体与碰撞物体有 collider 组件,碰撞物体有刚体组 件,或角色碰撞得包含角色组件 OR 改变 animation.speed 19.用代码实现第三角色控制器 public class Player : MonoBehaviour { public Transform _cameraTrans; private Vector3 _cameraOffset; void Awake() { _cameraOffset = transform.position - _cameraTrans.position; } void Update() { _cameraTrans.position = transform.position - _cameraOffset; } } 20.实现吊机吊物体的功能 吊机吊物体需要节点挂接和坐标系转换
21.获取、增加、删除组件的命令分别是什么 获取:GetComponent 增加:AddComponent 删除:Destroy 22.Animation.CrossFade 命令作用是:C A. 动画放大 B.动画转换 C.动画的淡入为其他动画 23.Application.loadLevel 命令为:A A. 加载关卡 B.异步加载关卡 C.加载动作 24.调试记录到控制台的命令是什么? Debug.Log(); 25.编辑器类存放路径是什么? 工程目录下的 Assets/Editor 文件夹下。 26.使用原生 GUI 创建一个可以拖动的窗口命令是什么? GUI.DragWindow(); 27.localPosition 与 Position 的使用区别? localPosition:自身位置,相对于父级的变换的位置。 Position:在世界坐标 transform 的位置 28.含义 Mathf.Round, Mathf.Clamp, Mathf.Lerp Mathf.Round 四舍五入 Mathf.Clamp 限制 Mathf.Lerp 插值 29.写一个计时器工具,从整点开始计时,格式为:00:00:00 private float timer = 0f;
private int h = 0; private int m = 0; private int s = 0; private string timeStr = string.Empty; void Update () { timer += Time.deltaTime; if (timer >= 1f) {s++; if (s >= 60) {m++;s = 0;} if (m >= 60) {h++;m = 0;} if (h >= 99) {h = 0;} timer = 0;} } void OnGUI(){ timeStr = string.Format ("{0:D2}:{1:D2}:{2:D2}", h, m, s); GUI.Label (new Rect (10, 10, 100, 200), timeStr); } 30.写出 Animation 的五个方法 AddClip 添加剪辑、Blend 混合、Play 播放、Stop 停止、Sample 采样 31.用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放(用一个 Cube 即可)。 在场景中添加一个 Plan,Camera,Directional Light,Cube。添加两个脚本 scrollerScirpt(挂在 Camera), CubeDragScript(挂在 Cube 上)。 1.鼠标滚轮实现缩放:将摄像机的镜头拉近或者拉远,调整摄像机的视角就可以实现,主要实现代码如 下: void Update () { //鼠标滚轮的效果 if (Input.GetAxis("Mouse ScrollWheel") < 0) { if (Camera.main.fieldOfView <= 100) Camera.main.fieldOfView += 2; if (Camera.main.orthographicSize <= 20) Camera.main.orthographicSize += 0.5F; } //Zoom in if (Input.GetAxis("Mouse ScrollWheel") > 0) { if (Camera.main.fieldOfView > 2) Camera.main.fieldOfView -= 2; if (Camera.main.orthographicSize >= 1) Camera.main.orthographicSize -= 0.5F; } } 2.鼠标实现在场景中拖动物体: 解决思路就是将世界坐标转换成屏幕坐标,然后计算物体与鼠标之间移动量,循环鼠标被按下操作, 得到鼠标的当前位置,加上计算好的移动量,将新的坐标赋值给物理就行了。主要是开启一个协同程序 (Corountine)来处理 主要代码如下:
// Use this for initialization void Start () { StartCoroutine(OnMouseDown()); } IEnumerator OnMouseDown() { //将物体由世界坐标系转换为屏幕坐标系 Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position); //完成两个步骤 1.由于鼠标的坐标系是 2 维,需要转换成 3 维的世界坐标系 //2.只有 3 维坐标情况下才能来计算鼠标位置与物理的距离,offset 即是距离 //将鼠标屏幕坐标转为三维坐标,再算出物体位置与鼠标之间的距离 Vector3 transform.position offset = - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z)); while (Input.GetMouseButton(0)) { //得到现在鼠标的 2 维坐标系位置 Vector3 curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z); //将当前鼠标的 2 维位置转换成 3 维位置,再加上鼠标的移动量 Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset; //curPosition 就是物体应该的移动向量赋给 transform 的 position 属性 transform.position = curPosition; yield return new WaitForFixedUpdate(); //这个很重要,循环执行 } } 32.NGUI Button 怎样接受用户点击并调用函数,具体方法名称是什么 1、主要是在 UICamera 脚本中用射线判断点击的物体并通过 SendMessage 调用 OnClick() OnPress()等函 数,可以说 NGUI 的按钮是通过发消息这个方式调用的。具体方法名称是 OnClick() 2、void Awake () { //获取需要监听的按钮对象 GameObject button = GameObject.Find("UI Root/Button3"); //设置这个按钮的监听,指向本类的 ButtonClick 方法中。 UIEventListener.Get(button).onClick = OnButton3Click; } private void OnButton3Click(GameObject button) { Debug.Log("我是按钮 3 被点击了"); } 33.<愤怒的小鸟>给予初速度以后,怎么让小鸟受到重力和空气阻力的影响而绘 制抛物线轨迹,说出具体的计算方法. Vector3 v 代表初速度 v'代表现在的速度, 假设小鸟是沿的 z 轴也就是 transform.forward 方向运 动的质量为 1,那么 v'=v-new Vector3(0,g*t,f*t),transform.Translate(v')做的就是抛物线运动(g 为重力 加速度不要用现实中的需要自己调试,f 为阻力也要自己调试设置,t 为时间)
34.当游戏中需要频繁创建一个物体时,我们需要怎样做能够节省内存? 1、使用预制物体对象 Prefab 2、使用对象池技术,不使用时关闭,使用时打开 35.碰撞检测需要物体具备什么属性? 能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器 【Physics.OverlapSphere 相交球检测碰撞,碰撞检测需要包围盒】 36.Vector3.forward 与 Vector3(0,0,1)是一样的意思对吗? 对 37.下哪个函数在游戏进入新场景后会被马上调用? MonoBehaviour.OnLevelWasLoaded 38.itween 插件的作用是什么,itween 作用于世界坐标还是局部坐标,请列举 出 3 个其常用方法? iTween 是一个动画库,作者创建它的目的就是最小的投入实现最大的产出。让你做开发更轻松,用它 可以轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等“方法: a、MoveTo 物体移动; b、ColorTo:随着时间改变对象的颜色组; c、LookTo:随时间旋转物体让其脸部朝向所提供的 Vector3 或 Transform 位置; 39.U3D 中用于记录节点空间几何信息的组件名称,及其父类名称 Transform 父类是 Component 40.NGUI:把子控件放在父控件里面,如何上下边距都是 10。 给子控件设置上下两个锚点为 10 41.如何使子控件居中,如果使用 UGUI 怎么实现 设置子控件锚点为中心
42.去掉敏感字的程序(手写程序) String s = "你是坏蛋"; s.Replace("坏蛋", "**"); 43.unity3D 从唤醒到销毁有一段生命周期,列出系统自己调用的重要方法。 Awake () OnEnable () Start() FixedUpdate() OnTriggerXXX(Collider other) OnCollisionXXX (Collision collisionInfo) Update() LateUpdate () OnGUI() OnDisable () OnDestroy () 44.Unity3d 中 resources 目录一般用来放些什么,打包的时候会有什么影响? resource 一般用来放置一些需要动态加载的资源,打包程序的时候会将 Resource 目录下的全部文件都加 密压缩打进包内,这样再想使用 assetbundle 方式打小包的话就不行了 45.空间内一物体绕球面固定点(0、1、2)按照固定速度 speed 环绕运动。 public float Speed = 1; void Update () { transform.RotateAround (new Vector3(0,1,2),Vector3.up,Speed); } 46.以下关于 WWW.LoadFromCacheOrDownload 描述正确的是: C A.可被用于将 Text Assets 自动缓存到本地磁盘 B.可被用于将 Resource 自动缓存到本地磁盘 C.可被用于将 Assets Bundles 自动缓存到本地磁盘 D.可被用于将任意的 Unity 资源文件自动缓存到本地磁盘 47.以下哪个函数在游戏进入新场景后会被马上调用? C A:MonoBehaviour.OnSceneWasLoaded B:MonoBehaviour.OnSceneEnter C:MonoBehaviour.OnLevelWasLoaded D:MonoBehaviour.OnLevelEnter
分享到:
收藏