史上最全的Unity面试题(一)
unity3d面试题与参考答案

unity3d⾯试题与参考答案1、C#程序题1 2 3 4 5 6 7 8 9 10 11private static void aaa(int x) { x = 10; } private static void bbb(ref int x) { x = 10; } static void Main(string[] args){int x = 0; aaa(x); //现在x的值是:___ bbb(ref x); //现在x的值是:___}答案:0,,10。
详细解答:⼀个是复制⼀份值过去,⼀个是把地址传过去2、英⽂翻译题(把下⾯⽂字翻译成中⽂)Transform.LocalPositionvar localPosition:Vector3;Description:Position of the transform relative to the parent transform.If the transform has no parent,it is the same as Transform.position.Note that the parent transform's world rotation and scale are applied to the local position when calculating the world position.This means that while 1 unit in Transform.position is always 1 unit in transform.localPosition will get scaled by the scale of all ancestors.描述:相对于⽗级的变换的位置。
如果该变换没有⽗级,那么等同于Transform.position。
注意当计算世界的位置时,⽗级变换的世界旋转和缩放被应⽤到⾃⾝的位置。
游戏公司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常见面试题】本帖最后由小布丁~ 于 2015-6-30 08:24 编辑1. 游戏对象问题:游戏对象消失三种方法的区别?(enabled/Destroy/active)gameObject.renderer.enabled=fasle是控制一个物体是否在屏幕上渲染或显示而物体实际还是存在的只是想当于隐身而物体本身的碰撞体还依然存在的GameObject.Destroy()表示移除物体或物体上的组件代表销毁该物体实际上该物体的内存并没有立即释放而是在你下下个场景中槽释放内存资源,就是你a场景中Destroy了一般是在c场景中才真正释放该物体的内存资源(这是我的体会不知道理解错误没)gameObject.active=false是否在场景中停用该物体在你gameObject.active =false中则你在场景中用find找不到该物体如果该物体有子物体你要用SetActiveRecursively(false) 来控制是否在场景中停用该物体(递归的)副作用:通过GameObject.Find方法查找不到2. 协同程序(Coroutine)协同程序,即在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行。
换句话说,开启协同程序就是开启一个线程。
原理:协同程序被开启后作为一个线程在运行,而MonoBehaviour也是一个线程,他们成为互不干扰的模块,除非代码中用调用,他们共同作用于同一个对象,只有当对象不可见才能同时终止这两个线程。
使用MonoBehaviour.StartCoroutine方法即可开启一个协同程序。
使用StopCoroutine(string methodName)来终止一个协同程序,使用StopAllCoroutines()来终止所有可以终止的协同程序,但这两个方法都只能终止该MonoBehaviour中的协同程序。
还有一种方法可以终止协同程序,即将协同程序所在GameObject的Active属性设置为false,当再次设置active为ture 时,协同程序并不会再开启。
Unity面试题(一)

Unity⾯试题(⼀)第⼀部分1. 请简述值类型与引⽤类型的区别1. 值类型存储在内存栈中,引⽤类型数据存储在内存堆中,⽽内存单元中存放的是堆中存放的地址。
2. 值类型存取快,引⽤类型存取慢。
3. 值类型表⽰实际数据,引⽤类型表⽰指向存储在内存堆中的数据的指针和引⽤。
4. 栈的内存是⾃动释放的,堆内存是 .NET 中会由 GC 来⾃动释放。
5. 值类型继承⾃ System.ValueType, 引⽤类型继承⾃ System.Object 。
2.C# 中所有引⽤类型的基类是什么System.Object3. 请简述 ArrayList 和 List<Int> 的主要区别ArrayList,存在类型不安全问题,和装箱拆箱性能问题;类型不安全:ArrayList会把所有数据当做Object类型来处理,所以允许操作不同类型的数据;所以在运⾏时,可能会报类型不匹配的错误;装箱拆箱:例如需要将int-->object,object-->int;过程消耗性能;List<Int>:List是ArrayList的等效类;因为泛型避免了编译时输⼊不同类型;List将所有内容存储在T类数组中,没有装箱,但是数组是在堆上分配的。
所以避免了类型不安全和装箱拆箱问题;4. 请简述 GC (垃圾回收)产⽣的原因,并描述如何避免?原因:GC 回收堆上的内存避免: 1 )减少 new 产⽣对象的次数2 )使⽤公⽤的对象(静态成员)3 )将 String换为 StringBuilder5. 请描述 Interface 与 abstract类之间的不同⼀个类继承了某个抽象类表⽰它“是什么”,实现了某个接⼝表⽰它“有什么功能”或者“会做什么事”。
⽐如:燕⼦(具体类)是鸟(抽象类),会飞(接⼝)。
C#中不⽀持多继承,即燕⼦只能是鸟,不会是其他东西了;但可以有多个功能,做很多事,⽐如会飞(IFly),会吃(IEat)。
unity高级工程师面试题

unity高级工程师面试题Unity3D工程师一:值类型和引用类型有何区别?(6分)二:C#中所有引用类型的基类是什么?(4分)三:结构体和类有何区别?(5分)四:请描述Interface与抽象类之间的不同(5分)五:请简述GC(垃圾回收)产生的原因,并描述如何避免?(5分)六:Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法。
(5分)七:OnEnable、Awake、Start运行时的发生顺序?哪些可能在同一个对象周期中反复的发生?(5分)八:物理更新一般放在哪个系统函数里?(5分)九:CharacterController和Rigidbody的区别?(5分)十:MeshRender中material和sharedmaterial的区别?(5分)十一:什么是协同程序?(5分)十二:什么是渲染管道?(5分)十三:.Net与Mono的关系?(4分)十四:向量的点乘、叉乘以及归一化的意义?(6分)十五:Heap与Stack有何区别?(5分)十六:概述序列化:(5分)十七.如何优化内存?(10分)十八:N个元素取出最大(小)的K个元素,请说明思路及算法?(10分二十一:物理更新一般放在哪个系统函数里?FixedUpdate,每固定帧绘制时执行一次,和Update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。
FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。
Update就比较适合做控制。
二十二:在场景中放置多个Camera并同时处于活动状态会发生什么?游戏界面可以看到很多摄像机的混合。
二十三:如何销毁一个UnityEngine.Object及其子类?使用Destroy()方法;二十四:请描述为什么Unity3d中会发生在组件上出现数据丢失的情况一般是组件上绑定的物体对象被删除了二十五:LOD是什么,优缺点是什么?LOD(Levelofdetail)多层次细节,是最常用的游戏优化技术。
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文件夹下。
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秒开始⾄今的总毫秒数。
Unity3D面试题
Unity3D面试题1.哪种实时光源是Unity中没有的?A:点光源B:方向光C:聚光灯D:日光灯3.以下哪种操作步骤可以在场景中添加“WindZone”?A:Terrain->WindZone5.下列哪一项不属于Camera中的“ClearFlag”?A:Skybo某B:SolidColorC:DepthOnlyD:Background6.以下哪种脚本语言是Unity编辑器所不支持的?A:JavaScriptB:C#C:BooD:Perl7.对于Prefab,以下说法错误的是?A:Prefab资源可以在项目中多次重复使用B:由Prefab实例出的GameObject,其在Hierarchy视图中表现为蓝色C:Prefab上的组件信息一经改变,其实例出的GameObject也会自动改变D:实例出的GameObject上的组件信息一经改变,其对应的Prefab 也会自动改变8.下面哪种做法可以打开Unity的AetStore?A:Window->AetStoreB:Edit->AetStoreC:File->AetStoreD:Aet->AetStore9.在哪个面板中可以修改物体的空间属性,如位置、朝向、大小等?A:ProjectB:InpectorC:HierarchyD:Toolbar10.如何为一个Aet资源设定一个Label,从而能够方便准确的搜索到A:在Project窗口中选中一个Aet,右键->Create->LabelB:在Project窗口中选中一个Aet,右键->AddLabelC:在Project窗口中选中一个Aet,在Inpector窗口中点击添加Label的图标D:在Project窗口中选中一个Aet,在Inpector窗口中点击按钮“AddLabel”1.Mecanim系统中,BodyMak的作用是?A:指定身体的某一部分是否参与骨骼动画B:指定身体的某一部分是否参与物理模拟C:指定身体的某一部分是否可以输出骨骼信息D:指定身体的某一部分是否参与渲染3.下列关于光照贴图,说法错误的是?A:使用光照贴图比使用实时光源渲染要快B:可以降低游戏内存消耗C:可以增加场景真实感D:多个物体可以使用同一张光照贴图4.如何为物体添加光照贴图所使用的UV?A:不用添加,任何时候都会自动生成B:更改物体导入设置,勾选”GenerateLightmapUV”C:更改物体导入设置,勾选“SwapUV”D:更改物体导入设置,在UV选项中选择”UeLightmap”5.在哪个模块下可以修改RenderPath?A:CameraB:LightC:RenderSettingD:ProjectSetting->Quality6.以下哪项技术不是目前Unity所支持的OccluionCulling技术?A:PVSonlyB:PVSanddynamicobjectC:AutomaticPortalGenerationD:DynamicOnly7.关于Vector3的API,以下说法正确的是?A:Vector3.normalize可以获取一个三维向量的法线向量;B:Vector3.magnitude可以获取一个三维向量的长度;C:Vector3.forward与Vector3(0,0,1)是一样的意思;D:Vector3.Dot(向量A,向量B)是用来计算向量A与向量B的叉积8.以下哪个函数在游戏进入新场景后会被马上调用?A:MonoBehaviour.OnSceneWaLoadedB:MonoBehaviour.OnSceneEnterC:MonoBehaviour.OnLevelWaLoadedD:MonoBehaviour.OnLevelEnter9.什么是导航网格(NavMeh)?A:一种用于描述相机轨迹的网格B:一种被优化过的物体网格C:一种用于物理碰撞的网格D:一种用于实现自动寻路的网格10.下列那些选项不是网格层属性的固有选项A:DefaultB:WalkableC:NotWalkableD:Jump。
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 的那张原始⽚计算出来的图⽚效果要好得多,速度也更快.当然你不需要回答这些原理,简单描述⼀下即可。
unity3d 面试试题
unity3d 面试题1. 在场景中放置多个Camera并同时处于活动状态时会发生什么.2. 请简述Prefab的作用,并描述如何在移动设备的环境下恰当的使用它.3. 如何销毁一个UnityEngine.Object及其子类.4. 请简述为什么Unity3D中会发生在组件上出现数据丢失的情况(missing).4. 请简述Unity3D下如何安全的在不同工程间迁移asset数据,请举出三种方法.qq群(68994667)的各种吐槽程序@成都: 09:39:021.多个camera与depth有关,2,prefab预定制,我的理解就是,它已经是对象了(包含了各种脚本,模型,资源关系的集合),但是如果你在场景中不引用它,它是不会占用内存的,因此在移动设备上不能直接引用(也就是不能直接托在给脚本的),可以采用resouces.load,传路径的方式。
3、难倒不能直接用destroy,可能另有玄机4、其实就是关系丢失了(Library目录),基本上就是没有在unity里改名啊,改变位置就会出这个问题,5、方法1,可以把assets目录和Library目录一起迁移,方法二,导出包,方法三,用unity带的assets server功能程序@成都: 09:39:12可能理解有错程序@kt: 09:39:47北京程序@笑靥: 09:42:23Program_cyh: 09:46:094.应该是引用的对象发生了改变程序@Frank: 10:26:214. 请简述Unity3D下如何安全的在不同工程间迁移asset数据,请举出三种方法. 个人认为只有一种方法,就是先导出unitypackage格式,再导入另外一个项目程序@Frank: 10:27:303. 如何销毁一个UnityEngine.Object及其子类.直接Destroy,不管是对象还是组件程序@Frank: 10:27:57请简述Prefab的作用就是模板程序@野猪: 10:28:21程序@Frank: 10:29:22请简述为什么Unity3D中会发生在组件上出现数据丢失的情况(missing).通常都是因为项目的相关文件被外部修改或删除成都程序@chwu: 10:33:10@程序@Frank 回答的靠谱程序@野猪: 10:33:21程序@kt: 10:35:33rendertexture 在destroy前,有没有必要调用release呢?程序@Frank: 10:38:38没有release程序@Frank: 10:38:54release 在DirectX里见过程序@小董: 10:40:07大侠何在!~程序@小董: 10:40:29脚本控制---创建一个prefab 如何实现!程序@小董: 10:40:50并且制定目录和命名策划@多乐士: 10:46:35UnityEditor.PrefabUtility.CreateEmptyPrefab。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一:什么是协同程序
在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足。
二:Unity3d中的碰撞器和触发器的区别
碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性。
当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。
如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器
三:物体发生碰撞的必要条件
两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体,而且必须是运动的物体带有Rigidbody脚本才能检测到碰撞。
四:请简述ArrayList和List的主要区别
####ArrayList存在不安全类型(ArrayList会把所有插入其中的数据都当做Object来处理)
装箱拆箱的操作(费时)
L i s t是接口,ArrayList是一个实现了该接口的类,可以被实例化
五:如何安全的在不同工程间安全地迁移asset数据三种方法
1.将Assets目录和Library目录一起迁移
2.导出包,export Package
3.用unity自带的assets Server功能
六:OnEnable、Awake、Start运行时的发生顺序哪些可能在同一个对象周期中反复的发生
Awake –>OnEnable->Start,OnEnable在同一周期中可以反复地发生。
七:MeshRender中material和sharedmaterial的区别
修改sharedMaterial将改变所有物体使用这个材质的外观,并且也改变储存在工程里的材质设置。
不推荐修改由sharedMaterial返回的材质。
如果你想修改渲染器的材质,使用material 替代。
八:Unity提供了几种光源,分别是什么
四种。
平行光:Directional Light
点光源:Point Light
聚光灯:Spot Light
区域光源:Area Light
九:简述一下对象池,你觉得在FPS里哪些东西适合使用对象池
对象池就存放需要被反复调用资源的一个空间,当一个对象回大量生成的时候如果每次都销毁创建会很费时间,通过对象池把暂时不用的对象放到一个池中(也就是一个集合),当下次要重新生成这个对象的时候先去池中查找一下是否有可用的对象,如果有的话就直接拿出来使用,不需要再创建,如果池中没有可用的对象,才需要重新创建,利用空间换时间来达到游戏的高速运行效果,在FPS游戏中要常被大量复制的对象包括子弹,敌人,粒子等
十:CharacterController和Rigidbody的区别
Rigidbody具有完全真实物理的特性,Unity中物理系统最基本的一个组件,包含了常用的物理特性,而CharacterController可以说是受限的的Rigidbody,具有一定的物理效果但不是完全真实的,是Unity为了使开发者能方便的开发第一人称视角的游戏而封装的一个组件。