史上最全的Unity面试题(三)
游戏公司unity面试题

Unity3d 程序员面试题1.什么是渲染管道?渲染管道有哪些步骤?答:渲染管道是指程序为了在显示器上输出图像而经过的一系列必要操作.渲染管道的步骤有:本地空间->世界空间->视图空间->背面剔除->光照计算->相机裁剪->投影计算->视口变换->光栅化2.Unity3d有几种加载Prefab的方式?答: 1.静态引用,建一个public变量,在Inspector里把prefab拉上去,在场景运行时会自动加载,用的时候instantiate2.Resource.Load, 在调用该函数后加载, Load以后instantiate3.AssetBundle.Load 在调用该函数后加载, Load以后instantiate3.什么是协同程序?答:在主线程序运行时同时开启另一段逻辑处理,来协助当前程序的执行.换名话说.开启协程就象开启一个线程.4.你例举几个你用过的Unity3d插件,并说明它们的用途和特点.5.Unity3d中的碰撞器Collision和触发器Trigger的区别?答:碰撞器有碰撞效果, IsTrigger = false 在碰撞发生时会调用OnCollisionEnter,OnCollisionStay,OnCollisionExit函数.触发器没有碰撞效果, IsTrigger = true, 可被触发时会调用OnTriggerEnter,OnTriggerStay,OnTriggerExit函数6.物体发生碰撞的必要条件答:两件物体都必须有碰撞组件(Collider),其中一物体还必须带有Rigidbody刚体组件7.在物体发生碰撞的整个过程中,有几个阶段,不同阶段分别调用哪些函数答:1.OnCollisionEnter2.OnCollisionStay3.OnCollisionExit8.在unity3D中有Update还有FixedUpdate,物理引擎的更新一般放在哪个系统函数里,为什么?答:物理引擎的更新一般放在FixedUpdate里面,和Update不同,FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降.因为FixedUpdate是每固定帧绘制时执行一次,所以更适合做物理控制.9.移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中?答:移动摄像机的动作应该放在LateUpdate函数中.在每帧执行完毕调用,它是在所有Update结束后才调用,比较适合用于命令脚本的执行.如果不是在所有Update执行完后就移动摄像机可能会出现摄像机移动了,视口里的内容还没有更新的空帧现象.10.场景中有多个相机(Camera)时,怎么来设置多个相机的渲染顺序.答: Depth参数,设为-1会最先被渲染,值越大越后被渲染.11.LOD是什么, 优缺点是什么?答: LOD 是Level Of Detail的缩写,是指的多层次细节技术,是最常用的游戏优化技术.它按照模型的位置和重要程度决定物体渲染的精细层度,从而降低非重要物体的在视口中的面数和细节度,来提高渲染运算的速度.12.写出光照计算中的Diffuse的计算公式?答: diffuse = Kd * colorLight *max(N . L, 0) ; Kd漫反射系数,ColorLight光照的颜色,N物体表面单位法线向量, L由点指向光源的单位向量, 其中N与L为点乘,如果结果小于等于0,则漫反射为013.Vertex Shader是什么?答:顶点着色器14.MipMap是什么,作用?答:MIP map技术与材质帖图技术结合,根据距观看者远近距离的不同,以不同的分辨率将单一的材质帖图以多重图像的形式表现出来并代表平面纹理:尺寸最大的图像放在前面显著的位置,而相对较小的图像则后退到背景区域。
unity面试题目及答案

unity面试题目及答案一、Introduction (简介)在Unity面试中,通常会涉及到一些常见的技术问题和编程知识点。
下面将列举一些常见的Unity面试题目,并给出相应的答案。
希望能够对您有所帮助。
二、Unity基础知识1. 什么是Unity?Unity是一款跨平台的游戏开发引擎,它提供了丰富的工具和各种功能,方便开发人员创建游戏、模拟器和其他交互式内容。
2. Unity支持哪些平台?Unity支持 iOS、Android、Windows、Mac、Linux等多个平台。
3. 请简述Unity中的场景(Scene)和资源(Asset)的概念及用途。
场景(Scene)是Unity中用于组织和呈现游戏或应用程序的空间。
资源(Asset)则是Unity中用于存储游戏元素(如角色、音频、图片等)的文件。
4. Unity中脚本编程语言是什么?Unity支持多种脚本编程语言,包括C#、JavaScript和Boo。
其中C#是最常用的脚本语言。
5. 在Unity中如何创建一个脚本?在Unity中,可以通过鼠标右键点击Project视图中的文件夹,选择“Create”->“C# Script”,然后命名脚本文件。
6. 请简述Unity中的游戏对象(GameObject)和组件(Component)的关系。
游戏对象(GameObject)是Unity中的基本构建单位,可以用于组织场景中的元素。
而组件(Component)可以附加到游戏对象上,用于控制和定义游戏对象的行为与属性。
7. Unity中常用的内置组件有哪些?Unity中常用的内置组件有Transform(用于控制游戏对象的位置、旋转和缩放)、Renderer(用于渲染游戏对象的图形)、Collider(用于碰撞检测)等。
8. 请简述Unity中的物理引擎。
Unity中的物理引擎可以用于模拟游戏中的物理效果,如重力、碰撞等。
Unity使用了开源的物理引擎库Bullet Physics和NVIDIA PhysX。
unity常见面试题

21.请描述为什么Unity3d中会发生在组件上出现数据丢失的情况一般是组件上绑定的物体对象被删除了22.alpha blend工作原理Alpha Blend 实现透明效果,不过只能针对某块区域进行alpha操作,透明度可设。
23.写出光照计算中的diffuse的计算公式diffuse = Kd x colorLi【狗刨学习网】ght x max(N*L,0);Kd 漫反射系数、colorLight 光的颜色、N 单位法线点指向光源的单位向量、其中N与L点乘,如果结果小于等于0,则漫反射为0。
24.Lod是什么,优缺点是什么?LOD(Level of detail)多层次细节,是最常用的游戏优化技术。
它按照模型的位置和重要程度决定物体渲染的资非重要物体的面数和细节度,从而获得高效率的渲染运算。
25.两种阴影判断的方法、工作原理。
26.Vertex Shader是什么,怎么计算?顶点着色器27.MipMap是什么,作用?MipMapping:在三维计算机图形的贴图渲染中有常用的技术,为加快渲染进度和减少图像锯齿,贴图被处理成预先计算和优化过的图片组成的文件,这样的贴图被称为Mip【狗刨学习网】Map。
28.机试:二选一1.用代码实现第三角色控制器2.实现吊机吊物体的功能29.反向旋转动画的方法是什么?30.碰撞检测需要物体具备什么属性?31.获取、增加、删除组件的命令分别是什么?获取:GetComponent增加:AddComponent删除:Destroy32.Animation.CrossFade命令作用是:(C)A.动画放大B.动画转换C.动画的淡入为其他动画33.Application.loadLevel命令为:(A)A.加载关卡B.异步加载关卡C.加载动作34.调试记录到控制台的命令是什么?Debug.Log();35.编辑器类存放路径是什么?工程目录下的Assets/Editor文件夹下。
unity3d 面试题

unity3d 面试题Unity3D面试题Unity3D是一款用于游戏开发的跨平台游戏引擎,广泛应用于游戏开发、虚拟现实和增强现实等领域。
在Unity3D面试中,面试官通常会考察候选人对Unity3D的了解程度,包括其核心概念、常用功能和技术以及解决问题的能力。
本文将针对Unity3D面试常见的题目进行介绍和解答。
1. 请简要介绍一下Unity3D的主要特点和优势。
Unity3D作为一款综合性游戏开发引擎,有以下几点主要特点和优势:- 跨平台支持:Unity3D可以在多个平台上运行,包括Windows、Mac、iOS、Android等,方便开发者进行跨平台的游戏开发。
- 强大的编辑器:Unity3D提供了强大的可视化编辑器,开发者可以方便地进行场景编辑、物体创建、材质设置等操作。
- 丰富的资源库:Unity3D拥有庞大的资源库,包括模型、贴图、音频等素材,开发者可以在开发过程中快速找到适合的资源。
- 灵活的脚本支持:Unity3D支持多种脚本语言,包括C#、JavaScript等,开发者可以根据自身喜好和项目需求选择使用。
- 社区活跃:Unity3D拥有庞大的开发者社区,开发者可以在社区中交流、分享经验和解决问题。
2. 请说明一下Unity3D的游戏开发流程。
Unity3D的游戏开发流程通常包括以下几个主要阶段:- 设计阶段:包括游戏的创意构思、关卡设计、物体设计等。
- 美术阶段:包括游戏角色和场景的建模、贴图、动画制作等。
- 编程阶段:根据设计阶段的需求,通过编写脚本实现游戏的各种功能,包括玩家控制、碰撞检测、音效播放等。
- 调试和优化阶段:测试游戏的各种功能和性能,修复bug,优化游戏的性能和体验。
- 发布阶段:将游戏打包成可执行文件,发布到对应平台(如PC、手机等)。
3. 请介绍一下Unity3D中常用的游戏物体组件。
在Unity3D中,常用的游戏物体组件包括:- Transform:控制物体的位置、旋转和缩放。
Unity笔试面试题目分享

Unity笔试⾯试题⽬分享这⼏天在准备找⼯作,拿出了以前的⼀些资料,整理了⼀下分享出来看看,⼀是⽅便⾃⼰查漏补缺,⼆来其中的⼤部分问题是⾃⼰理解概括的,有⼤佬如果看到有错误的地⽅能够评论交流⼀下⾃然是最好的啦!希望早点找到⼀个⼯作可以不⽤在家躺⼫了......以下开始归纳题⽬——第⼀部分1.点乘与叉乘,⼏何意义及公式点乘:计算投影和两个向量之间的夹⾓ |a||b|cos<a,b>叉乘:计算两个向量组成平⾯的法线⽅向,计算法线,可以计算出a向量与b向量组成的平⾏四边形的⾯积 |a||b|sin<a,b>2.以下代码的意图是什么?有没有什么问题?应该怎么写?for(int i=0;i<10;i++){ if(list[i]==9) { list.RemoveAt(i); }}超出索引值,因为在移除指定下标的元素后会丢失元素,所以索引最多只能到8,⽽不能到9,并且在遍历的时候不应该删除元素。
3.数组,List,ArrayList的区别数组:在内存中是连续存储的,有下标,访问迅速,便于赋值以及修改数据,但是需要预先向内存申请指定的空间。
ArrayList:在ArrayList中插⼊不同类型的数据是允许的,将所有数据都转化为Object来使⽤,可能出现不匹配的问题,类型是属于不安全的数据结构类型,⽽且装箱和拆箱操作会导致性能受到很⼤的损耗。
因此导致了List诞⽣,也因此衍⽣了泛型的概念。
List:可以使⽤泛型来动态的指定对象的类型,减少了类型转换和运⾏时出错的可能性,动态地根据加⼊或减少的元素数量进⾏空间的删减,存储不是连续的,移除某个元素之后会导致后⾯的元素移动到前⾯。
4.有⼀个需求,要求体⼒每5分钟增加1点,可以通过int GetTimeStamp()函数获取当前时间戳,如何实现该需求,要保存什么数据,或者应当⽤什么⽅式来刷新体⼒。
时间戳:从1970年1⽉1⽇00点00分00秒开始⾄今的总毫秒数。
Unity游戏程序员面试题及解答

Unity游戏程序员⾯试题及解答典型的⼀些如⼿写排序算法、⼀些基本数学问题,在此就不列举了。
以下整理出⼀些代表性的、有参考价值的题,真实⾯试题,附有本⼈的解答,欢迎讨论。
题1.指出下列哪些属于值类型?int System.Object string UnityEngine.MonoBehaviour UnityEngine.Object struct enum Vector3说明:System.Object是所有类型的基类,其本⾝是引⽤类型。
题2.获取、增加、删除组建的命令分别是什么?获取: GetComponent() 增加: AddComponent() 删除: RemoveComponent()题3.简述你使⽤过哪些第三⽅插件?Skyshop做IBL和PBR,Shatter Toolkit做模型物理破碎,Final IK插件做反向运动学计算。
说明:IBL是基于图像的渲染,PBR是基于物理的渲染。
题4.简述⼀下对象池原理。
什么情况下使⽤?对象池可以将对象存储在⼀块预先划出的内存区域中,当需要时可以取出使⽤,⽽不需要每次都要实例化新的对象。
⼀般在需要循环获取⼀个对象但是不关⼼对象的创造时机时的情况下可以使⽤。
说明:对象池在很多语⾔中都有实现。
所以回答不必拘泥于某种具体的语⾔,说出它的思想即可。
题5.使⽤mipmap有什么好处和坏处?什么情况下使⽤?答:使⽤mipmap可以降低现存带宽占⽤,提升渲染性能,还能减少远处因为分辨率较⼤的纹理因过分缩⼩⽽产⽣的失真。
坏处是会使内存占⽤变⼤,某些情况下会导致远处贴图模糊。
说明:mipmap是⼀种纹理技术,在三维世界中,显⽰⼀张图的⼤⼩与摄象机的位置有关,近的地⽅,图⽚实际象素就⼤⼀些,远的地⽅图⽚实际象素就会⼩⼀些,就要进⾏⼀些压缩,例如⼀张64*64的图,在近处,显⽰出来可能是50*50,在远处可能显⽰出来是20*20.如果只限于简单的去除某些像素,将会使缩⼩后的图⽚损失很多细节,图⽚变得很粗糙,因此,图形学有很多复杂的⽅法来处理缩⼩图⽚的问题,使得缩⼩后的图⽚依然清晰.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 的那张原始⽚计算出来的图⽚效果要好得多,速度也更快.当然你不需要回答这些原理,简单描述⼀下即可。
unity vr 面试题

unity vr 面试题随着虚拟现实(Virtual Reality,简称VR)技术的快速发展,越来越多的公司开始招聘具备Unity VR开发经验的人才。
作为一名开发人员,你在参加Unity VR面试时,可能会遇到以下问题:1. 请简要介绍一下Unity VR的开发流程和基本原理。
Unity VR开发主要分为以下几个步骤:1)创建场景:使用Unity引擎创建一个空场景,设置相机的适配模式和位置,并导入所需的VR SDK。
2)导入资源:导入必要的3D模型、音效和纹理等资源,并进行必要的设置和优化。
3)编写脚本:使用C#或UnityScript编写脚本,实现虚拟现实交互逻辑,如对象的移动、碰撞检测等。
4)测试与调试:在VR设备上进行实时测试和调整,确保游戏在虚拟环境中的表现正常。
5)发布与部署:根据目标平台的要求进行打包和发布,分发给用户或运营商。
在Unity VR开发中,常用的VR SDK有Oculus VR、SteamVR、Google VR等。
开发VR应用时,需要充分了解和理解VR硬件设备的工作原理和特性,考虑用户体验(User Experience,简称UX),确保应用的稳定性和性能优化。
2. 请介绍一下Unity中常用的VR交互技术和效果。
Unity中常用的VR交互技术包括:1)头部追踪:使用VR设备将用户的头部动作实时获取并应用到场景的摄像机中,实现用户在VR环境中的观察和查看功能。
2)手部追踪:通过手柄等输入设备获取用户手部动作信息,实现手部在VR环境中的交互操作,如抓取、拖拽等。
3)碰撞检测:利用Unity中提供的物理引擎组件,实现虚拟物体与实际物体的碰撞效果,增强用户对虚拟现实环境的沉浸感。
4)用户界面(User Interface,简称UI):在VR场景中添加虚拟的交互界面,如菜单、按钮等,利用头部追踪和手部追踪等技术进行操作,提供便捷的用户交互。
5)空间音效:利用3D音效技术,根据用户在VR场景中的位置和方向实时调整声音的音量和位置,增强沉浸感和真实感。
Unity面试题(超全)

Unity面试题(超全)这个是我们Unity技术经理总结出来的面试题,也是企业面试Unity开发技术人员经常用到的。
希望能够帮助正在找工作的你们。
这个是我刚刚整理出的Unity面试题,为了帮助大家面试,同时帮助大家更好地复习Unity知识点,如果大家发现有什么错误,(包括错别字和知识点),或者发现哪里描述的不清晰,请在下面留言,我会重新更新,希望大家共同来帮助开发者一:什么是协同程序?在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足。
二:Unity3d中的碰撞器和触发器的区别?碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属*。
当IsTrigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;当IsTrigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。
如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器三:物体发生碰撞的必要条件?两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体,而且必须是运动的物体带有Rigidbody脚本才能检测到碰撞。
四:请简述ArrayList和List的主要区别?####ArrayList存在不安全类型(ArrayList会把所有*入其中的数据都当做Object来处理)装箱拆箱的*作(费时)List是接口,ArrayList 是一个实现了该接口的类,可以被实例化五:如何安全的在不同工程间安全地迁移asset数据?三种方法1.将Assets目录和Library目录一起迁移2.导出包,exportPackage3.用unity自带的assetsServer功能六:OnEnable、Awake、Start运行时的发生顺序?哪些可能在同一个对象周期中反复的发生Awake–>OnEnable->Start,OnEnable在同一周期中可以反复地发生。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二十一:物理更新一般放在哪个系统函数里?
FixedUpdate,每固定帧绘制时执行一次,和Update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。
FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。
Update就比较适合做控制。
二十二:在场景中放置多个Camera并同时处于活动状态会发生什么?游戏界面可以看到很多摄像机的混合。
二十三:如何销毁一个UnityEngine.Object及其子类?
使用Destroy()方法;
二十四:请描述为什么Unity3d中会发生在组件上出现数据丢失的情况一般是组件上绑定的物体对象被删除了
二十五:LOD是什么,优缺点是什么?
LOD(Level of detail)多层次细节,是最常用的游戏优化技术。
它按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
缺点是增加了内存。
二十六:MipMap是什么,作用?
MipMapping:在三维计算机图形的贴图渲染中有常用的技术,为加快渲染进度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为MipMap。
二十七:请描述Interface与抽象类之间的不同
抽象类表示该类中可能已经有一些方法的具体定义,但接口就是公公只能定义各个方法的界面,不能具体的实现代码在成员方法中。
类是子类用来继承的,当父类已经有实际功能的方法时该方法在子类中可以不必实现,直接引用父类的方法,子类也可以重写该父类的方法。
实现接口的时候必须要实现接口中所有的方法,不能遗漏任何一个。
二十八:.Net与Mono的关系?
mono是.net的一个开源跨平台工具,就类似java虚拟机,java本身不是跨平台语言,但运行在虚拟机上就能够实现了跨平台。
.net只能在windows下运行,mono可以实现跨平台跑,可以运行于linux,Unix,Mac OS等。
二十九:简述Unity3D支持的作为脚本的语言的名称
Unity的脚本语言基于Mono的.Net平台上运行,可以使用.NET库,这也为XML、数据库、正则表达式等问题提供了很好的解决方案。
Unity里的脚本都会经过编译,他们的运行速度也很快。
这三种语言实际上的功能和运行速度是一样的,区别主要体现在语言特性上。
JavaScript、C#、Boo
三十:U3D中用于记录节点空间几何信息的组件名称,及其父类名称Transform 父类是Component
三十一:向量的点乘、叉乘以及归一化的意义?
1.点乘描述了两个向量的相似程度,结果越大两向量越相似,还可表示投影
2.叉乘得到的向量垂直于原来的两个向量
3.标准化向量:用在只关系方向,不关心大小的时候
三十二:为何大家都在移动设备上寻求U3D原生GUI的替代方案
不美观,OnGUI很耗费时间,效率不高,使用不方便
三十三:请简述如何在不同分辨率下保持UI的一致性
NGUI很好的解决了这一点,屏幕分辨率的自适应性,原理就是计算出屏幕的宽高比跟原来的预设的屏幕分辨率求出一个对比值,然后修改摄像机的size。
UGUI通过锚点和中心点和分辨率也解决这个问题
三十四:什么是LightMap?
LightMap:就是指在三维软件里实现打好光,然后渲染把场景各表面的光照输出到贴图上,最后又通过引擎贴到场景上,这样就使物体有了光照的感觉。
三十五:Unity和cocos2d的区别
1. Unity3D支持C#、javascript等,cocos2d-x 支持c++、Html5、Lua等。
2. cocos2d 开源并且免费
3. Unity3D支持iOS、Android、Flash、Windows、Mac、Wii等平台的游戏开发,cocos2d-x 支持iOS、Android、WP等。
三十六:C#和C++的区别?
简单的说:C# 与C++ 比较的话,最重要的特性就是C# 是一种完全面向对象的语言,而
C++ 不是,另外C# 是基于IL 中间语言和.NET Framework CLR 的,在可移植性,可维护性和强壮性都比C++ 有很大的改进。
C# 的设计目标是用来开发快速稳定可扩展的应用程序,当然也可以通过Interop 和Pinvoke 完成一些底层操作。
更详细的区别大家可以参考这里
三十七:结构体和类有何区别?
结构体是一种值类型,而类是引用类型。
(值类型、引用类型是根据数据存储的角度来分的)就是值类型用于存储数据的值,引用类型用于存储对实际数据的引用。
那么结构体就是当成值来使用的,类则通过引用来对实际数据操作
三十八:ref参数和out参数是什么?有什么区别?
ref和out参数的效果一样,都是通过关键字找到定义在主函数里面的变量的内存地址,并通过方法体内的语法改变它的大小。
不同点就是输出参数必须对参数进行初始化。
ref必须初始化,out 参数必须在函数里赋值。
ref参数是引用,out参数为输出参数。
三十九:C#的委托是什么?有何用处?
委托类似于一种安全的指针引用,在使用它时是当做类来看待而不是一个方法,相当于对一组方法的列表的引用。
用处:使用委托使程序员可以将方法引用封装在委托对象内。
然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。
与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。
四十:C#中的排序方式有哪些?
选择排序,冒泡排序,快速排序,插入排序,希尔排序,归并排序。