《Unity面试题》 |
版本 |
作者 |
参与者 |
完成日期 |
备注 |
Unity_JobView_V01_1.0 |
严立钻 |
|
2018.07.26 |
|
|
|
|
|
|
##《Unity面试题》发布说明:
++++“Unity面试题”是对在Unity职位面试中相关技术点的总结,立钻哥哥按照一个简单的章节分类进行整理。
++++当然,这些技术点有些是Unity常用的技术点,有些是各种面试题筛选整理,也有些是对Unity面试点的推断拓展。
++++“Unity面试题”将打造成Unity技术宝库,不但是面试的重要参考资料,也是对Unity知识点的汇总。
++++“Unity面试题”将采用简单概述,不拓展,将每个技术点限定在简短篇幅中。
++++Unity面试题ABC:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++Unity面试题D:https://blog.csdn.net/VRunSoftYanlz/article/details/78630838
++++Unity面试题E:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity面试题F:https://blog.csdn.net/VRunSoftYanlz/article/details/78630945
##《Unity面试题》目录:
#第一篇:Unity经典面试题
#第二篇:C#问题
#第三篇:Unity问题
#第四篇:Unity模拟面试
#第五篇:Unity面试进阶
#第六篇:立钻哥哥带您高薪就业
#第一篇:Unity经典面试题 |
#第一篇:Unity经典面试题
++++1A.01:什么是协同程序?
++++1A.02:请简述ArrayList和List的主要区别?
++++1A.03:MeshRender中material和sharedmaterial的区别?
++++1A.04:简述一下对象池,你觉得在FPS里哪些东西适合使用对象池?
++++1A.05:什么叫做链条关节?
++++1A.06:Unity3d提供了一个用于保存和读取数据的类(PlayerPrefs),其用来操作的数据类型有哪三种,请列出保存和读取整形数据的函数?
++++1A.07:Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法?
++++1A.08:物理更新一般放在哪个系统函数里?
++++1A.09:LOD是什么,优缺点是什么?
++++1A.10:MipMap是什么,作用?
++++1A.11:结构体和类有何区别?
++++1A.12:ref参数和out参数是什么?有什么区别?
++++1A.13:C#的委托是什么?有何用处?
++++1A.14:如何优化内存?
++++1A.15:代码分析查看问题?
++++1A.16:Unity3D Shader分哪几种,有什么区别?
++++1A.17:C#中四种访问修饰符是哪些?各有什么区别?
++++1A.18:CharacterController和Rigidbody的区别?
++++1A.19:移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中?
++++1A.20:获取、增加、删除组件的命令分别是什么?
++++1A.21:请简述如何在不同分辨率下保持UI的一致性?
++++1A.22:UNITY3d在移动设备上的一些优化资源的方法?
++++1A.23:请描述Interface与抽象类之间的不同?
++++1A.24:向量的点乘,叉乘及归一化的意义?
++++1A.25:请简述private,public,protected,internal的区别?
++++1A.26:Unity3D的协程和C#线程之间的区别是什么?
++++1A.27:简述StringBuilder和String的区别?
++++1A.28:值类型和引用类型有何区别?
++++1A.29:动态加载资源的方式?
++++1A.30:在类的构造函数前加上static会报什么错?为什么?
++++1A.31:动态加载资源的方式?
++++1A.32:什么是DrawCall? DrawCall高了有什么影响?如何降低DrawCall?
++++1A.34:List(链表)和数组的区别在哪里?
++++1A.35:请简述GC(垃圾回收)产生的原因,并描述如何避免?
++++1A.38:什么是动态合批?跟静态合批有什么区别?
++++1A.39:什么是LightMap?
++++1A.40:Unity3D中的碰撞器和触发器的区别?
##1A.01:什么是协同程序? |
++1A.01:什么是协同程序?
++++立钻哥哥:协程称为协同程序,即在主线程运行的同时开启另一段逻辑,来协助当前程序的执行。
++++StartCoroutine()是开启协程,StopCoroutine()是关闭协程,协程的返回值是IEnumerator类型,而在协程内部必须有yield return ***,
++++IEnumerator用来记录执行到yield return的位置,每次执行协程时都是从当前位置向后执行,而不是从协程的最开始位置执行,除非只有一个yield return;
++++在一个主程序中可以开启多个协程。
##1A.02:请简述ArrayList和List的主要区别? |
++1A.02:请简述ArrayList和List的主要区别?
++++立钻哥哥:ArrayList存在不安全类型(ArrayList会把所有插入其中的数据都当做Object来处理)装箱拆箱的操作。
++++List是泛型,可以指定特定的类型,避免过多的装箱拆箱操作,增加对内存的消耗。
##1A.03:MeshRender中material和sharedmaterial的区别? |
++1A.03:MeshRender中material和sharedmaterial的区别?
++++立钻哥哥:修改sharedMaterial将改变所有使用这个材质的物体外观,并且也改变储存在工程里的材质设置。
++++不推荐修改由sharedMaterial返回的材质。
++++如果想修改渲染器的材质,使用material替代。
##1A.04:简述一下对象池,你觉得在FPS里哪些东西适合使用对象池? |
++1A.04:简述一下对象池,你觉得在FPS里哪些东西适合使用对象池?
++++立钻哥哥:对象池(ObjectPool)就存放需要被反复调用资源的一个空间。
++++当一个对象会大量生成的时候,如果每次都销毁,创建会很费时间,通过对象池把暂时不用的对象放到一个池中(也就是一个集合),
++++当下次要重新生成这个对象的时候先去池中查找一下是否有可用的对象,如果有的话就直接拿出来使用,不需要再创建,如果池中没有可用的对象,才需要重新创建,利用空间换时间来达到游戏的高速运行效果。
++++在FPS游戏中常被大量复制的对象包括:子弹,敌人,粒子等。
##1A.05:什么叫做链条关节? |
++1A.05:什么叫做链条关节?
++++立钻哥哥:链条关节(Hinge Joint),可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。
##1A.06:Unity3d提供了一个用于保存和读取数据的类(PlayerPrefs),其用来操作的数据类型有哪三种,请列出保存和读取整形数据的函数? |
++1A.06:Unity3d提供了一个用于保存和读取数据的类(PlayerPrefs),其用来操作的数据类型有哪三种,请列出保存和读取整形数据的函数?
++++立钻哥哥:PlayerPrefs提供用来操作的数据类型是:int, float, string;
++++保存和读取整形数据的函数:PlayerPrefs.SetInt(); PlayerPrefs.GetInt();
##1A.07:Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法? |
++1A.07:Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法?
++++立钻哥哥:比较完整的脚本的生命周期: 【Awake()】=>【OnEnable()】=>【Start()】=>【FixedUpdate()】=>【Update()】=>【LateUpdate】=>【OnGUI()】=>【OnDisable()】=>【OnDestroy()】
##1A.08:物理更新一般放在哪个系统函数里? |
++1A.08:物理更新一般放在哪个系统函数里?
++++立钻哥哥:物理更新使用FixedUpdate(),每固定帧绘制时执行一次,和Update()不同的是FixedUpdate()是渲染帧执行,
++++如果设备的渲染效率低下的时候,FixedUpdate()调用次数就会跟着下降。
++++FixedUpdate()比较适用于物理引擎的计算,因为是跟每帧渲染有关。
++++Update()就比较适合做控制。
##1A.09:LOD是什么,优缺点是什么? |
++1A.09:LOD是什么,优缺点是什么?
++++立钻哥哥:LOD(Level of detail):多层次细节,是最常用的游戏优化技术。
++++LOD按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。(LOD的缺点:增加了内存。)
##1A.10:MipMap是什么,作用? |
++1A.10:MipMap是什么,作用?
++++立钻哥哥:MipMap技术有点类似于LOD技术,但是不同的是,LOD针对的是模型资源,而MipMap针对的纹理贴图资源。
++++使用MipMap后,贴图会根据摄像机距离的远近,选择使用不同精度的贴图。
++++MipMap的缺点:会占用内存,因为MipMap会根据摄像机远近不同而生成对应的八个贴图,所以必然占内存。
++++MipMap的优点:会优化显存带宽,用来减少渲染,因为可以根据实际情况,会选择适合的贴图来渲染,距离摄像机越远,显示的贴图像素越低,越近像素越高。
##1A.11:结构体和类有何区别? |
++1A.11:结构体和类有何区别?
++++立钻哥哥:结构体是一种值类型,而类是引用类型。
++++值类型、引用类型是根据数据存储的角度来分的。(值类型用于存储数据的值,引用类型用于存储对实际数据的引用)
++++结构体就当成值来使用的,类则通过引用来对实际数据操作。
##1A.12:ref参数和out参数是什么?有什么区别? |
++1A.12:ref参数和out参数是什么?有什么区别?
++++立钻哥哥:ref和out参数的效果一样,都是通过关键字找到定义在主函数里面的变量的内存地址,并通过方法体内的语法改变它的大小。
++++不同点就是输出参数必须对参数进行初始化。(ref必须初始化,out参数必须在函数里赋值。)
++++ref参数是引用,out参数为输出参数。
##1A.13:C#的委托是什么?有何用处? |
++1A.13:C#的委托是什么?有何用处?
++++立钻哥哥:delegate委托类似于一种安全的指针引用,在使用它时是当做类来看待而不是一个方法,相当于对一组方法的列表的引用。
++++用处:用委托使得程序员可以将方法引用封装到委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。
++++delegate委托与C++中的函数指针不同:委托是面向对象的,而且是类型安全的。
##1A.14:如何优化内存? |
++1A.14:如何优化内存?
++++立钻哥哥:1、压缩自带类库;
++++2、将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;
++++3、释放AssetBundle占用的资源;
++++4、降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;
++++5、使用光照贴图(LightMap),使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)等;
++++6、代码中少产生临时变量。
##1A.15:代码分析查看问题? |
++1A.15:代码分析查看问题?
List<int> ls = new List<int>(new int[]{ 1, 2, 3, 4, 5});
foreach(int item in ls){
Console.WriteLine(item * item);
ls.Remove(item);
}
++++立钻哥哥:该代码会产生运行时错误,在ls.Remove(item)这行,因为foreach是只读的。不能一边遍历一边修改。
##1A.16:Unity3D Shader分哪几种,有什么区别? |
++1A.16:Unity3D Shader分哪几种,有什么区别?
++++立钻哥哥:Unity3D Shader分3种:固定功能管线着色器、表面着色器、顶点片段着色器。
++++表面着色器:抽象层次比较高,它可以轻松地以简洁方式实现复杂着色。(表面着色器可同时在前向渲染和延迟渲染模式下正常工作)
++++顶点片段着色器:可以非常灵活地实现需要的效果,但是需要编写更多的代码,并且很难与Unity的渲染管线完美集成;
++++固定功能管线着色器:可以作为前两种着色器的备用选择,当硬件无法运行哪些酷炫Shader时,可以通过固定功能管线着色器来绘制出一些基本的效果。
##1A.17:C#中四种访问修饰符是哪些?各有什么区别? |
++1A.17:C#中四种访问修饰符是哪些?各有什么区别?
++++立钻哥哥:C#中有四种访问修饰符:public、private、protected、internal;
++++public:存取不受限制;
++++private:只有包含该成员的类可以存取;
++++protected:只有包含该成员的类以及派生类可以存取;
++++internal:只有当前工程可以存取;
##1A.18:CharacterController和Rigidbody的区别? |
++1A.18:CharacterController和Rigidbody的区别?
++++立钻哥哥:Rigidbody具有完全真实物理的特性,而CharacterController可以说是受限的Rigidbody,具有一定的物理效果但不是完全真实的。
##1A.19:移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中? |
++1A.19:移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中?
++++立钻哥哥:摄像机移动放在LateUpdate()。
++++在所有Update()操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还没有角色的空帧出现。
##1A.20:获取、增加、删除组件的命令分别是什么? |
++1A.20:获取、增加、删除组件的命令分别是什么?
++++立钻哥哥:GetComponent()、AddComponent()、Destroy();
++++获取组件:GetComponent();
++++增加组件:AddComponent();
++++删除组件:Destroy();
##1A.21:请简述如何在不同分辨率下保持UI的一致性? |
++1A.21:请简述如何在不同分辨率下保持UI的一致性?
++++立钻哥哥:NGUI很好的解决了屏幕适配问题,屏幕分辨率的自适应性,原理就是计算出屏幕的宽高比跟原来的预设的屏幕分辨率求出一个对比值,然后修改摄像机的size。
++++UGUI通过锚点和中心点和分辨率也解决了这个分辨率自适应问题。
##1A.22:UNITY3d在移动设备上的一些优化资源的方法? |
++1A.22:UNITY3d在移动设备上的一些优化资源的方法?
++++立钻哥哥:1、使用AssetBundle,实现资源分离和共享,将内存控制到200M之内,同时也可以实现资源的在线更新;
++++2、顶点数对渲染无论是CPU还是GPU都是压力最大的贡献者,降低顶点数到8万以下,fps稳定到30帧左右;
++++3、只使用一盏动态光,不使用阴影,不使用光照探头;
++++4、粒子系统是CPU上的大头:
--A、剪裁粒子系统;
--B、合并同时出现的粒子系统;
--C、自己实现轻量级的粒子系统;
++++5、Animator也是一个效率奇差的地方:
--A、把不需要跟骨骼动画和动作过渡的地方全部使用Animation,控制骨骼数量在30根以下;
--B、Animator出视野不更新;
--C、删除无意义的Animator;
--D、Animator的初始化很耗时(能不用尽量不用Animator);
--E、除主角外都不要跟骨骼运动(Apply root motion);
--F、绝对禁止掉那些不带刚体带包围盒的物体(static collider)运动;
++++6、NGUI的代码效率很差,基本上runtime的时候对CPU的共享和Render不相上下;
++++7、每帧递归的计算finalalpha改为只有初始化和变动时计算;
++++8、去掉法线计算;
++++9、不要每帧计算viewSize和windowSize;
++++10、fillDrawCall时构建顶点缓存使用array.Copy();
++++11、代码剪裁:使用strip level,使用.Net2.0 subset;
++++12、尽量减少Smooth Group;
++++13、给美术定一个严格的经过科学验证的美术标准,并在U3D里面配以相应的检查工具;
##1A.23:请描述Interface与抽象类之间的不同? |
++1A.23:请描述Interface与抽象类之间的不同?
++++立钻哥哥:1、一个类只能继承一个抽象类,但可以同时继承多个接口;
++++2、抽象类里面可以有字段,接口里面不能有字段;
++++3、抽象类里面可以有private私有成员,接口里面所有的成员都是public公有的;
++++4、抽象类的成员可以带或者不带访问修饰符,接口里面一定不带访问修饰符;
++++5、一个子类继承抽象类时需重写里面的抽象方法,当子类是抽象类时可以不用重写;而继承接口时一定要实现接口里面的成员;
##1A.24:向量的点乘,叉乘及归一化的意义? |
++1A.24:向量的点乘,叉乘及归一化的意义?
++++立钻哥哥:1、点乘描述了两个向量的相似程度,结果越大两向量越相似,还可表示投影;
++++2、叉乘得到的向量垂直于原来的两个向量;
++++3、标准化向量:用在只关心方向,不关心大小的时候;
##1A.26:Unity3D的协程和C#线程之间的区别是什么? |
++1A.26:Unity3D的协程和C#线程之间的区别是什么?
++++立钻哥哥:多线程程序同时运行多个线程,而在任一指定时刻只有一个协程在运行,并且这个正在运行的协同程序只在必要时才被挂起。
++++除主线程之外的线程无法访问Unity3D的对象、组件、方法。
++++Unity3D没有多线程的概念,不过Unity也给我们提供了StartCoroutine(协同程序)和LoadLevelAsync(异步加载关卡)后台加载场景的方法。
++++StartCoroutine为什么叫协同程序,所谓协同,就是当在StartCoroutine的函数体里处理一段代码时,利用yield语句等待执行结果,这期间不影响主程序的继续执行,可以协同工作。
##1A.27:简述StringBuilder和String的区别? |
++1A.27:简述StringBuilder和String的区别?
++++立钻哥哥:String是字符串常量。
++++StringBuffer是字符串变量,线程安全;
++++StringBuilder是字符串变量,线程不安全。
++++String类型是个不可变的对象,当每次对String进行改变时都需要生成一个新的String对象,然后将指针指向一个新的对象,如果在一个循环里面,不断的改变一个对象,就要不断用String类型;
++++StringBuilder对象在做字符串连接操作时是在原来的字符串上进行修改,改善了性能。
++++连接操作频繁的时候,使用StringBuilder对象。(建议在不断更改对象的地方不要使用String)
##1A.28:值类型和引用类型有何区别? |
++1A.28:值类型和引用类型有何区别?
++++立钻哥哥:1、值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地主;
++++2、值类型存取速度快;引用类型存取速度慢;
++++3、值类型表示实际数据;引用类型表示指向存储在内存堆中的数据的指针或引用;
++++4、值类型继承自System.ValueType;引用类型继承自System.Object;
++++5、栈的内存分配是自动释放;而堆在.NET中会有GC来释放;
++++6、值类型的变量直接存放实际的数据;而引用类型的变量存放的则是数据的地址,即对象的引用;
##1A.29:动态加载资源的方式? |
++1A.29:动态加载资源的方式?
++++立钻哥哥:1、通过Resources模块,调用它的Load函数:可以直接load并返回某个类型的Object,前提是要把这个资源放在以Resources命名的文件夹下,Unity不管有没有场景引用,都会将其全部打入到安装包中。(Resources.Load())
++++2、通过AssetBundle的形式:即将资源打成AssetBundle放到服务器或本地磁盘,然后使用WWW模块get下来,然后从这个AssetBundle中Load某个object。(AssetBundle)
++++3、通过AssetDatabase.loadAsset:这种方式只在Editor范围内有效,游戏运行时没有这个函数,它通常是在开发中调试用的。(AssetDatabase资源数据库)
++++区别:Resources的方式需要把所有资源全部打入安装包,这对游戏的分包发布和版本升级(patch)是不利的,所以Unity推荐的方式是AssetBundle。(把资源打包成几个小的bundle,用哪个就Load哪个,这样还能分包发布和Patch)
++++说明:在开发过程中,不可能每更新一个资源就打一次Bundle,所以Editor环境下可以使用AssetDatabase来模拟,这通常需要我们封装一个Dynamic Resource动态资源的Loader模块,在不同的环境下做不同实现。
##1A.30:在类的构造函数前加上static会报什么错?为什么? |
++1A.30:在类的构造函数前加上static会报什么错?为什么?
++++立钻哥哥:构造函数格式为public+类名,如果加上static会报错(静态构造函数不能有访问修饰符)。
++++原因:静态构造函数不允许访问修饰符,也不接受任何参数;无论创建多少类型的对象,静态构造函数只执行一次;
++++运行库创建类实例或者首次静态成员之前,运行库调用静态构造函数;
++++静态构造函数执行先于任何实例级别的构造函数;
++++显然也就无法使用this和base来调用构造函数;
##1A.32:什么是DrawCall? DrawCall高了有什么影响?如何降低DrawCall? |
++1A.32:什么是DrawCall? DrawCall高了有什么影响?如何降低DrawCall?
++++立钻哥哥:Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call。
++++DrawCall越高对显卡的消耗就越大。
+++降低DrawCall的方法:
--1、Dynamic Batching动态批处理;
--2、Static Batching静态批处理;
--3、高级特性Shader降级为统一的低级特性的Shader;
##1A.34:List(链表)和数组的区别在哪里? |
++1A.34:List(链表)和Array(数组)的区别在哪里?
++++立钻哥哥:从逻辑结构和内存存储来看:
++++1、从逻辑结构来看:
--1.A、Array数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;Array数组可以根据下标直接存取。
--1.B、List链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(Array数组中插入、删除数据项时,需要移动其它数据项,非常繁琐)
++++2、从内存存储来看:
--2.A、(静态)Array数组从堆中分配空间,对于程序员方便快速,但是自由度小。
--2.B、List链表从堆中分配空间,自由度大但是申请管理比较麻烦。
++++可以看出:如果需要快速访问数据,很少或不插入和删除元素,就应该用Array数组;如果需要经常插入和删除元素就需要用List链表数据结构。
##1A.35:请简述GC(垃圾回收)产生的原因,并描述如何避免? |
++1A.35:请简述GC(垃圾回收)产生的原因,并描述如何避免?
++++立钻哥哥:当用new创建一个对象时,当可分配的内存不足,GC就会去回收未使用的对象,但是GC的操作是非常复杂的,会占用很多CPU时间,对于移动设备来:频繁的垃圾回收会严重影响性能。
++++建议可以避免GC频繁操作:
--1、减少用new创建对象的次数,在创建对象时会产生内存碎片;
--2、使用公用的对象(静态成员,常量),但是不能乱用,因为静态成员和常量的生命周期是整个应用程序;
--3、在拼接大量字符串时使用StringBuilder。
--4、使用Object Pool(对象池)技术;
##1A.38:什么是动态合批?跟静态合批有什么区别? |
++1A.38:什么是动态合批?跟静态合批有什么区别?
++++立钻哥哥:如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处理。(动态批处理操作是自动完成的,并不需要我们进行额外的操作。)
++++动态批处理(Dynamic Batching):一切都是自动的,不需要做任何操作,而且物体是可以移动的,但是限制很多。
++++静态批处理(Static Batching):自由度很高,限制很少。(缺点:可能会占用更多的内存,而且经过静态批处理后的所有物体都不可以再移动了。)
##1A.39:什么是LightMap? |
++1A.39:什么是LightMap?
++++立钻哥哥:LightMap称为光照贴图:把灯光和物体设置成静态,然后对灯光进行烘培,此时在物体表面形成一张有灯光效果的贴图。(把场景中的灯光删除掉,物体表面依赖有灯光的效果,这种效果是贴图造成的)
++++LightMap光照贴图的优点:避免动态光照在场景中的实时渲染,减少DrawCall。
##1A.40:Unity3D中的Collider碰撞器和Trigger触发器的区别? |
++1A.40:Unity3D中的Collider碰撞器和Trigger触发器的区别?
++++立钻哥哥:Collider碰撞器是Trigger触发器的载体,而Trigger触发器只是Collider碰撞器身上的一个属性。
++++当IsTrigger = false时:Collider碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;
++++当IsTrigger = true时:Collider碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。
++++说明:如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域时就可以用Trigger触发器。
#第二篇:C#问题 |
#第二篇:C#问题
++++2B.01、在类的构造函数前加上static会报什么错?为什么?
++++2B.02、C# StringBuilder类型比string类型的优势是什么?
++++2B.03、C#函数Func(string a, string b)用Lambda表达式怎么写?
++++2B.04、数列1,1,2,3,5,8,13,... 第n位数是多少? 用C#递归算法实现?
++++2B.05、请简述值类型与引用类型的区别?
++++2B.06、请简述ArrayList和List<>的主要区别?
++++2B.07、请简述GC(垃圾回收)产生的原因,并描述如何避免?
++++2B.08、请描述Interface与抽象类之间的不同?
++++2B.09、下列代码在运行中会产生几个临时对象?
++++2B.10、下列代码在运行中会发生什么问题?如何避免?
++++2B.11、请简述关键字Sealed用在类声明和函数声明时的作用?
++++2B.12、请简述private,public,protected,internal的区别?
++++2B.13、反射的实现原理?
++++2B.14、.Net与Mono的关系?
++++2B.15、请说出4种面向对象的设计原则,并分别简述它们的含义?
++++2B.16、HashTable是无序的吗?
##2B.01、在类的构造函数前加上static会报什么错?为什么? |
++2B.01、在类的构造函数前加上static会报什么错?为什么?
++++立钻哥哥:在构造函数如果有public修饰的静态构造函数时会报:“静态构造函数中不允许出现访问修饰符”。
++++如果什么修饰符都不加的话不会报错,静态构造函数一般是起初始化作用。
##2B.02、C# StringBuilder类型比string类型的优势是什么? |
++2B.02、C# StringBuilder类型比string类型的优势是什么?
++++立钻哥哥:StringBuilder的优势在于拼接,string的优势在于对字符串做一些处理。
##2B.03、C#函数Func(string a, string b)用Lambda表达式怎么写? |
++2B.03、C#函数Func(string a, string b)用Lambda表达式怎么写?
++++立钻哥哥:(a, b)=>{}
##2B.04、数列1,1,2,3,5,8,13,... 第n位数是多少? 用C#递归算法实现? |
++2B.04、数列1,1,2,3,5,8,13,... 第n位数是多少? 用C#递归算法实现?
++++立钻哥哥:
public static int Add(int num){
//立钻哥哥:递归的必要条件:1、结束条件;2、过程执行什么;
if(num == 0 || num == 1){
return 1;
}else{
return Add(num - 2) + Add(num - 1);
}
}
##2B.05、请简述值类型与引用类型的区别? |
++2B.05、请简述值类型与引用类型的区别?
++++立钻哥哥:区别:1、值类型存储在内存栈中;引用类型数据存储在内存堆中,而内存单元中存放的是堆中存放的地址。
++++2、值类型存取快;引用类型存取慢;
++++3、值类型表示实际数据;引用类型表示指向存储在内存堆中的数据的指针和引用;
++++4、栈的内存是自动释放的;堆内存是.Net中会由GC来自动释放;
++++5、值类型继承自System.ValueType;引用类型继承自System.Object;
##2B.06、请简述ArrayList和List<>的主要区别? |
++2B.06、请简述ArrayList和List<>的主要区别?
++++立钻哥哥:ArrayList是非泛型列表,存储数据时把所有的数据都当成object类型存储,存在装箱问题,取出来使用的时候存在拆箱问题,装箱拆箱会使性能变差,而且存在数据安全问题,但是优点在于可以让值类型和引用类型相互转换;
++++List是泛型列表,在使用的时候才去定义数据类型,泛型避免了拆箱装箱的问题,存入读取速度较快,类型也更安全;
##2B.07、请简述GC(垃圾回收)产生的原因,并描述如何避免? |
++2B.07、请简述GC(垃圾回收)产生的原因,并描述如何避免?
++++立钻哥哥:GC回收堆上的内存。
++++因为GC会消耗性能,如何避免GC:
--1、减少new产生对象的次数;
--2、使用共用的对象(静态成员);
--3、如果字符串拼接多的:将String换为StringBuilder;
##2B.08、请描述interface接口与abstract抽象类之间的不同? |
++2B.08、请描述interface接口与abstract抽象类之间的不同?
++++立钻哥哥:从语法、用法来分析:
++++1、语法不同处:
--1.A、抽象类中可以有字段;接口没有字段;
--2.B、抽象类中可以实现成员;接口只能包含抽象成员;
--3.C、抽象类中所有成员修饰符都可以使用;接口中所有的成员都是对外的,所以不需要修饰符修饰;
++++2、用法不同处:
--2.A、抽象类是概念的抽象;接口关注于行为;
--2.B、抽象类的子类与父类的关系是泛化关系,耦合度较高;而实现类和接口之间是实现的关系,耦合度比泛化低;
--3.C、一个类只能继承一个类;但是可以实现多个接口。
##2B.09、下列代码在运行中会产生几个临时对象? |
++2B.09、下列代码在运行中会产生几个临时对象?
string a = new string(“abc”);
a = (a.ToUpper() + “123”).SubString(0, 2);
++++立钻哥哥:3个临时变量。
++++说明:第一行是会出错的。应该这样初始化:string b = new string(new char[]{‘a’,’b’,’c’});
##2B.10、下列代码在运行中会发生什么问题?如何避免? |
++2B.10、下列代码在运行中会发生什么问题?如何避免?
List<int > ls = new List<int>(new int[]{ 1,2,3,4,5});
foreach(int item in ls){
Console.WriteLine(item*item);
ls.Remove(item);
}
++++立钻哥哥:或产生运行时错误,因为foreach是只读的。不能一边遍历一边修改。
++++如何避免:使用foreach的时候不要对内容进行修改,如果要修改可以使用for。
##2B.11、请简述关键字Sealed用在类声明和函数声明时的作用? |
++2B.11、请简述关键字Sealed用在类声明和函数声明时的作用?
++++立钻哥哥:Sealed访问修饰符用于类时,该类是密封类,可防止其他类继承此类。
++++在方法中使用则可防止派生类重写此方法。
##2B.12、请简述private,public,protected,internal的区别? |
++2B.12、请简述private,public,protected,internal的区别?
++++立钻哥哥:private:仅对该类公开;
++++public:对任何类和成员都公开,无限制访问;
++++protected:对该类和其派生类公开;
++++internal:只能在包含该类的程序集中访问该类;
++++protected internal: protected + internal;
##2B.13、反射的实现原理? |
++2B.13、反射的实现原理?
++++立钻哥哥:审查元数据并收集关于它的类型信息的能力。
##2B.14、.Net与Mono的关系? |
++2B.14、.Net与Mono的关系?
++++立钻哥哥:Mono是.Net的一个开源跨平台工具。
++++ .Net只能在Windows下运行,Mono可以实现跨平台,可以运行在linux,Unix,Mac OS等。
##2B.15、请说出4种面向对象的设计原则,并分别简述它们的含义? |
++2B.15、请说出4种面向对象的设计原则,并分别简述它们的含义?
++++立钻哥哥:6种设计原则:单一职责原则、开放封闭原则;里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则;
++++单一职责原则:一个类,最好只做一件事,只有一个引起它的变化;
++++开放封闭原则:对于扩展是开放的,对于更改是封闭的;
++++里氏替换原则:子类必须能够替换其基类;
++++依赖倒置原则:依赖于抽象;
++++接口隔离原则:使用多个小的专门的接口,而不要使用一个大的总接口;
++++迪米特法则:如果两个类不必彼此通信,那么这两个类就不应当发生直接的相互作用;
##2B.16、HashTable是无序的吗? |
++2B.16、HashTable是无序的吗?
++++立钻哥哥:电脑没有绝对的无序,HashTable是通过哈希码让开发者感觉无序。
#第三篇:Unity问题 |
#第三篇:Unity问题
++++3C.A、UI
++++3C.B、碰撞
++++3C.C、动画
++++3C.D、线程和协程
++++3C.E、四元数
++++3C.F、摄像机
++++3C.G、预制物
++++3C.H、Shader
++++3C.I、系统函数
++++3C.J、物理引擎
++++3C.K、Unity引擎问题
++++3C.M、图形图像
##3C.A、UI |
++3C.A、UI
++++3C.A.01、NGUI Button怎样接受用户点击并调用函数,具体方法名称是什么?
++++3C.A.02、请简述NGUI中Panel和Anchor的作用?
++++3C.A.03、为何大家都在移动设备上寻求U3D原生GUI的替代方案?
++++3C.A.04、使用原生GUI创建一个可以拖动的窗口命令是什么?
++++3C.A.05、使用Unity3D实现2D游戏,有几种方式?
###3C.A.01、NGUI Button怎样接受用户点击并调用函数,具体方法名称是什么? |
++3C.A.01、NGUI Button怎样接受用户点击并调用函数,具体方法名称是什么?
++++立钻哥哥:可以使用:直接监听事件、ButtonScript等方式;
++++1、直接监听事件:在按钮上绑定一个带有OnClick脚本,但这种方法不太好用,也不灵活。
++++2、ButtonScript:在按钮上添加BoxCollider,再添加ButtonScript脚本,把要调用的方法放到场景中一个物体上,一般放在摄像机上,因为摄像机一直存在,然后把这个方法添加到ButtonScript脚本里写好的委托里面,所以可以添加多个方法,一旦点击就触发事件。
###3C.A.02、请简述NGUI中Panel和Anchor的作用? |
++3C.A.02、请简述NGUI中Panel和Anchor的作用?
++++立钻哥哥:Panel是一个容器,它将包含所有UI小部件,并负责将所包含的部件组合优化,以减少绘制命令的调用;
++++Anchor是NGUI中屏幕分辨率的自适应性,来适应不同的分辨率的屏幕显示。
###3C.A.03、为何大家都在移动设备上寻求U3D原生GUI的替代方案? |
++3C.A.03、为何大家都在移动设备上寻求U3D原生GUI的替代方案?
++++立钻哥哥:原生GUI的缺点:1、不美观;
++++2、OnGUI很耗费时间;
++++3、使用不方便;
++++4、DrawCall很高;
###3C.A.04、使用原生GUI创建一个可以拖动的窗口命令是什么? |
++3C.A.04、使用原生GUI创建一个可以拖动的窗口命令是什么?
++++立钻哥哥:GUI.DragWindow();
###3C.A.05、使用Unity3D实现2D游戏,有几种方式? |
++3C.A.05、使用Unity3D实现2D游戏,有几种方式?
++++立钻哥哥:1、使用本身的GUI;
++++2、把摄像机的Projection(投影)值调为Orthographic(正交投影),不考虑Z轴;
++++3、使用2D插件,如:2DToolKit;
##3C.B、碰撞 |
++3C.B、碰撞
++++3C.B.01、怎么判断两个平面是否相交? 不能用碰撞体,说出计算方法?
++++3C.B.02、MeshCollider和其他Collider的一个主要不同点?
++++3C.B.03、Unity3D中的碰撞器和触发器的区别?
++++3C.B.04、物体发生碰撞的必要条件?
++++3C.B.05、当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况? 如何避免?
###3C.B.01、怎么判断两个平面是否相交? 不能用碰撞体,说出计算方法? |
++3C.B.01、怎么判断两个平面是否相交? 不能用碰撞体,说出计算方法?
++++立钻哥哥:在两个平面上分别取一个向量,然后看是否相交。
###3C.B.02、MeshCollider和其他Collider的一个主要不同点? |
++3C.B.02、MeshCollider和其他Collider的一个主要不同点?
++++立钻哥哥:MeshCollider是网格碰撞器,对于复杂网状模型上的碰撞检测,比其他的碰撞检测精确的多,但是相对其他的碰撞检测计算也增多了,所以一般使用网格碰撞也不会在面数比较多的模型上添加,而会做出两个模型:一个超简模能表示物体的形状用于做碰撞检测,一个用于显示。
###3C.B.03、Unity3D中的碰撞器和触发器的区别? |
++3C.B.03、Unity3D中的Collider碰撞器和Trigger触发器的区别?
++++立钻哥哥:1、Collider碰撞器物体不能相互进入到对方内部;Trigger触发器可以;
++++2、Trigger触发器角色控制器可以使用;Collider碰撞器不能使用;
++++3、Trigger触发器没有物理属性;Collider碰撞器可以有力存在;
++++4、Collider碰撞器调用:OnCollisionEnter/Stay/Exit函数;Trigger触发器调用OnTriggerEnter/Stay/Exit函数;
###3C.B.04、物体发生碰撞的必要条件? |
++3C.B.04、物体发生碰撞的必要条件?
++++立钻哥哥:物体发生碰撞的必要条件:两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体;
###3C.B.05、当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况? 如何避免? |
++3C.B.05、当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况? 如何避免?
++++立钻哥哥:会发生穿透(碰撞检测失败了)
++++避免穿透的方法:把刚体的实时碰撞检测打开“Collision Detection”修改为“Continuous Dynamic”;
###3C.B.06、CharacterController和Rigidbody的区别? |
++3C.B.06、CharacterController和Rigidbody的区别?
++++立钻哥哥:CharacterController自带胶囊碰撞器,里面包含有刚体的属性;
++++Rigidbody就是刚体,使物体带有刚体的特征;
###3C.B.07、在Unity3d中物体发生碰撞的整个过程中,有几个阶段,分别列出对应的阶段函数? |
++3C.B.07、在Unity3d中物体发生碰撞的整个过程中,有几个阶段,分别列出对应的阶段函数?
++++立钻哥哥:物体发生碰撞的整个过程主要是三个阶段:Enter()、Stay()、Exit();
++++1、Collider.OnCollisionEnter():进入碰撞:当collider/rigidbody开始触动另一个rigidbody/collider时OnCollisionEnter()被调用。
++++2、Collider.OnCollisionStay():逗留碰撞:每个collider/rigidbody触动rigidbody/collider,将在每帧调用OnCollisionStay()。(通俗地说:一个碰撞器或刚体触动另一个刚体或碰撞器,在每帧都会调用OnCollisionStay(),直到它们之间离开不接触。)
++++3、Collider.OnCollisionExit():退出碰撞:当collider/rigidbody停止触动另一个rigidbody/collider时,OnCollisionExit()被调用。
##3C.C、动画 |
++3C.C、动画
++++3C.C.01、一个简单的游戏,怪物会走动/攻击/死亡,游戏角色会走动,跳跃/攻击/阻挡/死亡,还会接受玩家从输入端输入的指令,NPC会走动,他们彼此之间可以相互通信,请画出以上三种角色的UML图示?
++++3C.C.02、请描述游戏动画有哪几种,以及其原理?
++++3C.C.03、反向旋转动画的方法是什么?
++++3C.C.04、写出Animation的五个方法?
++++3C.C.05、动画层(AnimationState Layers)的作用是什么?
++++3C.C.06、ITween插件的作用是什么,ITween作用于世界坐标还是局部坐标,请列举3个常用方法?
++++3C.C.07、法线贴图、CS动画?
###3C.C.01、一个简单的游戏,怪物会走动/攻击/死亡,游戏角色会走动,跳跃/攻击/阻挡/死亡,还会接受玩家从输入端输入的指令,NPC会走动,他们彼此之间可以相互通信,请画出以上三种角色的UML图示? |
++3C.C.01、一个简单的游戏,怪物会走动/攻击/死亡,游戏角色会走动,跳跃/攻击/阻挡/死亡,还会接受玩家从输入端输入的指令,NPC会走动,他们彼此之间可以相互通信,请画出以上三种角色的UML图示?
++++立钻哥哥:
###3C.C.02、请描述游戏动画有哪几种,以及其原理? |
++3C.C.02、请描述游戏动画有哪几种,以及其原理?
++++立钻哥哥:主要有关节动画、单一网格模型动画(关键帧动画)、骨骼动画;
++++1、关节动画:把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整体的动画,角色比较灵活,Quake2中使用这种动画;
++++2、单一网格模型动画:由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其该变量,然后插值运算实现动画效果,角色动画较真实;
++++3、骨骼动画:广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,由关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观,皮肤网格的每一个顶点都会受到骨骼的影响,从而实现完美的动画。
###3C.C.03、反向旋转动画的方法是什么? |
++3C.C.03、反向旋转动画的方法是什么?
++++立钻哥哥:反转动画的方法是:将动画的速度调到-1。
###3C.C.04、写出Animation的五个方法? |
++3C.C.04、写出Animation的五个方法?
++++立钻哥哥:Animation的方法:
++++AddClip():添加剪辑;
++++Blend():混合;
++++Play():播放;
++++Stop():停止;
++++Sample():采样;
++++CrossFade():淡入淡出切换动画;
++++IsPlaying():是否正在播放某个动画;
###3C.C.05、动画层(AnimationState Layers)的作用是什么? |
++3C.C.05、动画层(AnimationState Layers)的作用是什么?
++++立钻哥哥:动画层作为一个具有层级动画编辑概念的工具,可以用来制作和处理任何类型的动画。
###3C.C.06、ITween插件的作用是什么,ITween作用于世界坐标还是局部坐标,请列举3个常用方法? |
++3C.C.06、ITween插件的作用是什么,ITween作用于世界坐标还是局部坐标,请列举3个常用方法?
++++立钻哥哥:ITween是补间动画的一个插件,主要作用就是给出开始、结束的值、时间,此插件实现各种动画,晃动,旋转,移动,褪色,上色,音量控制等;
++++1、MoveTo():物体移动;
++++2、ColorTo():随着时间改变对象的颜色组;
++++3、LookTo():随时间旋转物体让其脸部朝向所提供的Vector3或Transform位置;
###3C.C.07、法线贴图、CS动画? |
++3C.C.07、法线贴图、CS动画?
++++立钻哥哥:法线贴图:是一种特殊的纹理,可以应用在3D表面,让低模呈现出更明显的凹凸效果。(法线贴图一般应用在CG动画、美术效果要求较高的单机游戏)
++++CG动画:游戏中的CG动画其实是用3D模拟引擎制作的游戏短片,一般画面效果比较真实。
##3C.D、线程和协程 |
++3C.D、线程和协程
++++3C.D.01、Unity3D是否支持写成多线程程序? 如果支持的话需要注意什么?
++++3C.D.02、Unity3D的协程和C#线程之间的区别是什么?
++++3C.D.03、什么是协同程序?
###3C.D.01、Unity3D是否支持写成多线程程序? 如果支持的话需要注意什么? |
++3C.D.01、Unity3D是否支持写成多线程程序? 如果支持的话需要注意什么?
++++立钻哥哥:Unity支持多线程,如果同时要处理很多事情或者与Unity的对象互动小可以用Thread线程,否则使用Coroutine协程。
++++注意1:虽然支持多线程,但是仅能从主线程中访问Unity3D的组件、对象和Unity3D系统调用,所以如果使用的话需要把组件中的数值传到开启的新线程中。
++++注意2:C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象。
###3C.D.02、Unity3D的协程和C#线程之间的区别是什么? |
++3C.D.02、Unity3D的协程和C#线程之间的区别是什么?
++++立钻哥哥:多线程程序同时运行多个线程,除主线程之外的线程无法访问Unity3D的对象、组件、方法,而在任一指定时刻只有一个协程在运行。
###3C.D.03、什么是协同程序? |
++3C.D.03、什么是协同程序?
++++立钻哥哥:在主线程运行时开启另一段逻辑处理,来协助当前程序的执行。(换句话说,开启协程就是开启一个线程。可以用来控制运动、序列以及对象的行为。)
##3C.E、四元数 |
++3C.E、四元数
++++3C.E.01、四元数是什么? 主要作用是什么? 对欧拉角的优点是什么?
###3C.E.01、四元数是什么? 主要作用是什么? 对欧拉角的优点是什么? |
++3C.E.01、四元数是什么? 主要作用是什么? 对欧拉角的优点是什么?
++++立钻哥哥:所谓四元数,就是把4个实数组合起来的东西。(4个元素中,一个是实部,其余3个是虚部)
++++作用:四元数用于表示旋转。
++++优点:
--1、能进行增量旋转;
--2、避免万向锁;
--3、给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式)
++++四元数不会有欧拉角存在的gimbal lock问题(万向节死锁)
++++四元数由4个数组成,旋转矩阵需要9个数。
++++两个四元数之间更容易插值;
++++四元数、矩阵在多次运算后会积累误差,需要分别对其做规范化(normalize)和正交化(orthogonalize),对四元数规范化更容易;
++++与旋转矩阵类似,两个四元数相乘可表示两次旋转。
##3C.F、摄像机 |
++3C.F、摄像机
++++3C.F.01、在场景中放置多个Camera并同时处于活动状态会发生什么?
++++3C.F.02、Unity摄像机有几种工作方式,分别是什么?
###3C.F.01、在场景中放置多个Camera并同时处于活动状态会发生什么? |
+++3C.F.01、在场景中放置多个Camera并同时处于活动状态会发生什么?
++++立钻哥哥:会出现:游戏界面可以看到很多摄像机的混合。
###3C.F.02、Unity摄像机有几种工作方式,分别是什么? |
++3C.F.02、Unity摄像机有几种工作方式,分别是什么?
++++立钻哥哥:摄像机工作方式有两种:正交和透视;
++++【正交(Orthographic)】:正交无法看到一个物体距离自己有多远,或者远近的变化,物体也不会随着距离而收缩,所以一般做2D游戏或者是UI时会使用正交摄像机。
++++【透视(Perspective)】:透视一般看物体随着距离有大小的变化,一般3D游戏里经常使用这种摄像机。
##3C.G、预制体 |
++3C.G、预制体
++++3C.G.01、Prefab的作用? 如何在移动环境的设备下恰当地使用它?
++++3C.G.02、Unity当需要频繁创建一个物体对象时,怎样减少内存?
###3C.G.01、Prefab的作用? 如何在移动环境的设备下恰当地使用它? |
++3C.G.01、Prefab的作用? 如何在移动环境的设备下恰当地使用它?
++++立钻哥哥:Prefab是预制体,一般当游戏中需要频繁创建一个物体时,使用预制体可以节省内存,方便创建,方便对游戏物体进行操作,方便对属性进行修改。
###3C.G.02、Unity当需要频繁创建一个物体对象时,怎样减少内存? |
++3C.G.02、Unity当需要频繁创建一个物体对象时,怎样减少内存?
++++立钻哥哥:动态加载再实例化,如果自己不主动清理内存的话,再次加载不会增加内存的,会自动去取之前已经加载好的assets,
++++如果这一个assets都嫌多的话,那只能减资源了,比如:模型面数,纹理尺寸等。
##3C.H、Shader |
++3C.H、Shader
++++3C.H.01、写出光照计算中的diffuse的计算公式?
++++3C.H.02、MeshRender中material和shader的区别?
++++3C.H.03、Alpha Blend工作原理?
++++3C.H.04、光照贴图的优势是什么?
++++3C.H.05、Vertex Shader是什么,怎么计算?
++++3C.H.06、Unity3D提供了几种光源,分别是什么?
###3C.H.01、写出光照计算中的diffuse的计算公式? |
++3C.H.01、写出光照计算中的diffuse的计算公式?
++++立钻哥哥:实际光照强度I = 环境光(I ambient)+ 漫反射光(I diffuse)+ 镜面高光(I specular)
++++【环境光(I ambient)】:I ambient =环境光强度(A intensity)*环境光颜色(A color);
--I ambient = A intensity * A color;
++++【漫反射光(I diffuse)】:I diffuse =镜面光照强度(D intensity)*镜面光颜色(S color)*(光的反射向量(R).观察者向量(V))^镜面光指数(n);
--I diffuse = D intensity * S color * (R.V)^n;
###3C.H.02、MeshRender中material和shader的区别? |
++++立钻哥哥:MeshRender是模型渲染的组件,有此组件物体才能显示出来。
++++Material是材质球,实际就是shader的实例,并进行赋值,贴图、纹理、颜色等。
++++Shader是着色器,实际上是一段程序,还可以用来实现一些仅靠贴图不容易实现的效果,如玻璃等。
++++Shader大致分三种:1、表面着色器;2、顶点和片元着色器;3、固定功能着色器;
###3C.H.03、Alpha Blend工作原理? |
++3C.H.03、Alpha Blend工作原理?
++++立钻哥哥:Alpha Blend是实现透明效果。
++++Color = 原颜色 * alpha/255 + 目标色*(255 - alpha)/255;
###3C.H.04、光照贴图的优势是什么? |
++3C.H.04、光照贴图的优势是什么?
++++立钻哥哥:1、使用光照贴图比使用实时光源渲染要快;
++++2、可以降低游戏内存消耗;
++++3、多个物体可以使用同一张光照贴图;
###3C.H.05、Vertex Shader是什么,怎么计算? |
++3C.H.05、Vertex Shader是什么,怎么计算?
++++立钻哥哥:Vertex Shader:顶点着色器:顶点着色器是一段执行在GPU上的程序,用来取代fixed pipeline中的transformation和lighting,Vertex Shader主要操作顶点。
++++Vertex Shader对输入顶点完成了从local space到homogeneous space(齐次空间)的变换过程,homogeneous space即projection space的下一个space。(在这期间共有:world transformation, view transformation, projection transformation, lighting等几个过程)
###3C.H.06、Unity3D提供了几种光源,分别是什么? |
++3C.H.06、Unity3D提供了几种光源,分别是什么?
++++立钻哥哥:Unity3D提供了4种光源:
++++平行光:Directional light;
++++点光源:Point Light;
++++聚光灯:Spot Light;
++++区域光:Area Light;
##3C.I、系统函数 |
++3C.I、系统函数
++++3C.I.01、物理更新一般在哪个系统函数里?
++++3C.I.02、OnEnable、Awake、Start运行时的发生顺序? 哪些可能在同一个对象周期中反复的发生?
++++3C.I.03、Unity3D脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法?
++++3C.I.04、物理更新一般放在哪个系统函数里?
++++3C.I.05、移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中?
++++3C.I.06、请简述OnBecameVisible及OnBecameInvisible的发生时机,以及这一对回调函数的意义?
++++3C.I.07、Unity3D提供了一个用于保存和读取数据的类(PlayerPrefs),请列出保存和读取整形数据的函数?
++++3C.I.08、动态加载资源的方式? 区别是什么?
++++3C.I.09、以下哪个函数在游戏进入新场景后会被马上调用?
++++3C.I.10、如何销毁一个UnityEngine.Object及其子类?
++++3C.I.11、获取、增加、删除组件的命令分别是什么?
++++3C.I.12、Application.loadLevel命令是什么?
++++3C.I.13、调试记录到控制台的命令是什么?
++++3C.I.14、LayerMask.NameToLayer()这个方法有什么作用?
++++3C.I.15、localPosition与Position的使用区别?
++++3C.I.16、物体自身旋转使用的函数?
++++3C.I.17、物体围绕某点旋转使用的函数?
++++3C.I.18、U3D中用于记录节点空间几何信息的组件名称,及其父类名称?
++++3C.I.19、写一个计时器工具,从整点开始计时,格式为:00:00:00?
###3C.I.01、物理更新一般在哪个系统函数里? |
++3C.I.01、物理更新一般在哪个系统函数里?
++++立钻哥哥:物理更新一般放在FixedUpdate(),每固定帧绘制时执行一次,和Update()不同的是FixedUpdate()是渲染帧执行,如果渲染效率低下的时候:FixedUpdate()调用次数就会跟着下降。
++++FixedUpdate()比较适用于物理引擎的计算,因为是跟每帧渲染有关。
++++Update()就比较适合做控制。
###3C.I.02、OnEnable、Awake、Start运行时的发生顺序? 哪些可能在同一个对象周期中反复的发生? |
++3C.I.02、OnEnable、Awake、Start运行时的发生顺序? 哪些可能在同一个对象周期中反复的发生?
++++立钻哥哥:【Awake()】=>【OnEnable()】=>【Start()】;
++++OnEnable()在同一周期中可以反复地发生。
###3C.I.03、Unity3D脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法? |
++3C.I.03、Unity3D脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法?
++++立钻哥哥:【Awake()】=>【Start()】=>【Update()】=>【FixedUpdate()】=>【LateUpdate】=>【OnGUI()】=>【OnDisable()】=>【OnDestroy()】
###3C.I.04、物理更新一般放在哪个系统函数里? |
++3C.I.04、物理更新一般放在哪个系统函数里?
++++立钻哥哥:FixedUpdate()因为不受到计算机帧频的影响,所以比较适合于做物理方面的更新;
###3C.I.05、移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中? |
++3C.I.05、移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中?
++++立钻哥哥:移动摄像机的动作放在LateUpdate(),在每帧执行完毕调用,它是在所有Update()结束后才调用,比较适合用于命令脚本的执行。
++++官网上例子是摄像机的跟随,都是在所有Update()操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还没有角色的空帧出现。
###3C.I.06、请简述OnBecameVisible及OnBecameInvisible的发生时机,以及这一对回调函数的意义? |
++3C.I.06、请简述OnBecameVisible及OnBecameInvisible的发生时机,以及这一对回调函数的意义?
++++立钻哥哥:当物体是否可见切换时会调用:OnBecameVisible()和OnBecameInvisible();
++++可以用于只需要在物体可见时才进行的计算。
++++当Renderer(渲染器)在任何相机上都不可见时调用:OnBecameInvisible();
++++当Renderer(渲染器)在任何相机上可见时调用:OnBecameVisible();
###3C.I.07、Unity3D提供了一个用于保存和读取数据的类(PlayerPrefs),请列出保存和读取整形数据的函数? |
++3C.I.07、Unity3D提供了一个用于保存和读取数据的类(PlayerPrefs),请列出保存和读取整形数据的函数?
++++立钻哥哥:保存和读取整形数据的函数:PlayerPrefs.SetInt(); 和 PlayerPrefs.GetInt();
###3C.I.08、动态加载资源的方式? 区别是什么? |
++3C.I.08、动态加载资源的方式? 区别是什么?
++++立钻哥哥:动态加载资源的方式有:1、Resources.Load(); 2、AssetBundle
++++Resources是动态内部调用,Resources在编辑环境下是project窗口的一个文件夹,调用里面的资源,可以用Resources类,比如Resources.Load();
++++打包后这个文件夹是不存在的,会统一生成assets资源,AssetBundle是外部调用的,要用AssetBundle,首先要先把资源打包为.assetbundle文件,再动态的去加载这个文件,本地或者网络服务器都可以。
++++立钻哥哥:Resources资源的加载是动态加载内部的,AssetBundle是动态加载外部的;
###3C.I.09、以下哪个函数在游戏进入新场景后会被马上调用? |
++3C.I.09、以下哪个函数在游戏进入新场景后会被马上调用?
++++立钻哥哥:进入新场景后马上调用:MonoBehaviour.OnLevelWasLoaded();
###3C.I.10、如何销毁一个UnityEngine.Object及其子类? |
++3C.I.10、如何销毁一个UnityEngine.Object及其子类?
++++立钻哥哥:销毁使用:Destroy();
###3C.I.11、获取、增加、删除组件的命令分别是什么? |
++3C.I.11、获取、增加、删除组件的命令分别是什么?
++++立钻哥哥:组件获取:GetComponet();
++++组件增加:AddComponent();
++++没有组件删除只有让组件不生效:enable();
###3C.I.12、Application.loadLevel命令是什么? |
++3C.I.12、Application.loadLevel命令是什么?
++++立钻哥哥:Application.LoadLevel()是加载关卡。
###3C.I.13、调试记录到控制台的命令是什么? |
++3C.I.13、调试记录到控制台的命令是什么?
++++立钻哥哥:调试命令:Debug.Log();
###3C.I.14、LayerMask.NameToLayer()这个方法有什么作用? |
++3C.I.14、LayerMask.NameToLayer()这个方法有什么作用?
++++立钻哥哥:LayerMask.NameToLayer(): 层索引;
###3C.I.15、localPosition与Position的使用区别? |
++3C.I.15、localPosition与Position的使用区别?
++++立钻哥哥:localPosition:自身位置,相对于父级的变换的位置,局部坐标其实就是自身的坐标,会随着物体的旋转而变化的;
++++Position:在世界坐标Transform的位置,世界坐标是不会变的,一直以世界坐标轴的XYZ为标准。
###3C.I.16、物体自身旋转使用的函数? |
++3C.I.16、物体自身旋转使用的函数?
++++立钻哥哥:物体自身旋转: Transform.Rotate();
###3C.I.17、物体围绕某点旋转使用的函数? |
++3C.I.17、物体围绕某点旋转使用的函数?
++++立钻哥哥:物体围绕某点旋转: Transform.RotateAround();
###3C.I.18、U3D中用于记录节点空间几何信息的组件名称,及其父类名称? |
++3C.I.18、U3D中用于记录节点空间几何信息的组件名称,及其父类名称?
++++立钻哥哥:Unity3d中用于记录节点空间几何信息的组件是:Transform。
++++Transform父类是Component。
###3C.I.19、写一个计时器工具,从整点开始计时,格式为:00:00:00? |
++3C.I.19、写一个计时器工具,从整点开始计时,格式为:00:00:00?
++++立钻哥哥:
int second;
int minute;
int hour;
void Start(){
second = 0;
minute = 0;
hour = 0;
}
void Update(){
if(second < 60){
second += Time.deltaTime;
}else{
second -= 60;
minute += 1;
}
if(minute >= 60){
minute -= 60;
hour += 1;
}
}
##3C.J、物理引擎 |
++3C.J、物理引擎
++++3C.J.01、《愤怒的小鸟》给予初速度以后,怎么让小鸟受到重力和空气阻力的影响而绘制抛物线轨迹,说出具体的计算方法?
++++3C.J.02、实现吊机吊物体的功能?
++++3C.J.03、上机题:用鼠标实现在场景中拖动物体,用鼠标滚动实现缩放(用一个Cube即可)
++++3C.J.04、Material和Physic Material的区别?
++++3C.J.05、CharacterController和Rigidbody的区别?
++++3C.J.06、Unity3D的物理引擎中,有几种施加力的方式,分别描述出来?
++++3C.J.07、什么叫做链条关节?
++++3C.J.08、什么是导航网格(NavMesh)?
++++3C.J.09、Unity3D提供了几种光源类型,分别是哪几种?
###3C.J.01、《愤怒的小鸟》给予初速度以后,怎么让小鸟受到重力和空气阻力的影响而绘制抛物线轨迹,说出具体的计算方法? |
++3C.J.01、《愤怒的小鸟》给予初速度以后,怎么让小鸟受到重力和空气阻力的影响而绘制抛物线轨迹,说出具体的计算方法?
++++立钻哥哥:添加Rigidbody刚体使小鸟模拟受到重力影响。
###3C.J.02、实现吊机吊物体的功能? |
++3C.J.02、实现吊机吊物体的功能?
++++立钻哥哥:
using UnityEngine;
using System.Collecitons;
public class CraneCS : MonoBehaviour{
} //立钻哥哥:public class CraneCS : MonoBehaviour{}
###3C.J.03、上机题:用鼠标实现在场景中拖动物体,用鼠标滚动实现缩放(用一个Cube即可) |
++3C.J.03、上机题:用鼠标实现在场景中拖动物体,用鼠标滚动实现缩放(用一个Cube即可)
++++立钻哥哥:在场景中添加一个Plane,Cube。
++++添加两个脚本ScrollerScript(挂在Camera上),CubeDragScript(挂在Cube上)。
++++1、鼠标滚轮实现缩放:将摄像机的镜头拉近或者拉远,调整摄像机的视角就可以实现,主要实现代码如下:
void Update(){
//鼠标滚轮的效果
//Camera.main.fieldOfView:摄像机的视野
//Camera.main.orthographicSize:射线机的正交投影
//Zoom out
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、鼠标实现在场景中拖动物体:解决思路:就是将世界坐标转换成屏幕坐标,然后计算物体与鼠标之间移动量,循环鼠标被按下操作,得到鼠标的当前位置,加上计算好的移动量,将新的坐标赋值给物理就行了。(主要是开启一个协同程序(Coroutine)来处理)
//Use this for initialization
void Start(){
StartCoroutine(OnMouseDown()); //立钻哥哥:开启一个协程
}
IEnumerator OnMouseDown(){
//将物体由世界坐标系转换为屏幕坐标系
Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position); //转换
//立钻哥哥:完成两个步骤:1、由于鼠标的坐标系是二维,需要转换成三维的世界坐标系;2、只有三维坐标情况下才能来计算鼠标位置与物理的距离,offset即是距离:将鼠标屏幕坐标转为三维坐标,再算出物体位置与鼠标之间的距离
Vector3 offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z));
while(Input.GetMouseButton(0)){
//得到现在鼠标的二维坐标系位置
Vector3 curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z);
//将当前鼠标的二维位置转换成三维位置,再加上鼠标的移动量
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset;
//curPosition就是物体应该的移动向量赋给transform的position属性
transform.position = curPosition;
yield return new WaitForFixedUpdate(); //这个很重要,循环执行
}
}
###3C.J.04、Material和Physic Material的区别? |
++3C.J.04、Material和Physic Material的区别?
++++立钻哥哥:PhysicMaterial物理材质:主要是控制物体的摩擦,弹力等物理属性。
++++Material材质:主要是控制一个物体的颜色,质感等显示。
###3C.J.05、CharacterController和Rigidbody的区别? |
++3C.J.05、CharacterController和Rigidbody的区别?
++++立钻哥哥:CharacterController自带胶囊碰撞器,里面包含有刚体的属性;
++++Rigidbody就是刚体,使物体带有刚体的特征。
###3C.J.06、Unity3D的物理引擎中,有几种施加力的方式,分别描述出来? |
++3C.J.06、Unity3D的物理引擎中,有几种施加力的方式,分别描述出来?
++++立钻哥哥:施加力:rigidbody.AddForce(); 和 rigidbody.AddForceAtPosition();
###3C.J.07、什么叫做链条关节? |
++3C.J.07、什么叫做链条关节?
++++立钻哥哥:链条关节:Hinge Joint,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。
###3C.J.08、什么是导航网格(NavMesh)? |
++3C.J.08、什么是导航网格(NavMesh)?
++++立钻哥哥:NavMesh导航网格:是Unity内一种用于实现自动寻路的网格。
###3C.J.09、Unity3D提供了几种光源类型,分别是哪几种? |
++3C.J.09、Unity3D提供了几种光源类型,分别是哪几种?
++++立钻哥哥:Unity提供了4种光源类型:
++++平行光:Directional Light;
++++点光源:Point Light;
++++聚光灯:Spot Light;
++++区域光源:Area Light;
##3C.K、Unity引擎问题 |
++++3C.K.01、简述Unity3D支持的作为脚本的语言的名称?
++++3C.K.02、向量的点乘、叉乘以及归一化的意义?
++++3C.K.03、矩阵相乘的意义及注意点?
++++3C.K.04、为什么dynamic font在unicode环境下优于static font?
++++3C.K.05、Render的作用? 描述MeshRender和SkinnedMeshRender的关系与不同?
++++3C.K.06、简述SkinnedMesh的实现原理?
++++3C.K.07、为什么Unity3D中会发生:在组件上出现数据丢失的情况?
++++3C.K.08、如何安全的在不同工程间安全地迁移Asset数据? 三种方式?
++++3C.K.09、LOD是什么,优缺点是什么?
++++3C.K.10、两种阴影判断的方法、工作原理?
++++3C.K.11、MipMap是什么,作用?
++++3C.K.12、用代码实现第三角色控制器?
++++3C.K.13、Mecanim系统中,Body Mask的作用是?
++++3C.K.14、Unity连接数据库?
++++3C.K.15、如何优化内存?
++++3C.K.16、您用过哪些插件?
++++3C.K.17、在哪个模块下可以修改Render Path?
###3C.K.01、简述Unity3D支持的作为脚本的语言的名称? |
++3C.K.01、简述Unity3D支持的作为脚本的语言的名称?
++++立钻哥哥:Unity的脚本语言基于Mono的.Net平台上运行,可以使用.NET库,这也为XML、数据库、正则表达式等问题提供了很好的解决方案。
++++Unity里的脚本都会经过编译,他们的运行速度也很快。(C#、Boo、JavaScript这三种语言实际上的功能和运算速度都一样的,区别主要体现在语言特性上。)
###3C.K.02、向量的点乘、叉乘以及归一化的意义? |
++3C.K.02、向量的点乘、叉乘以及归一化的意义?
++++立钻哥哥:1、点乘:计算两个向量之间的夹角,还可以表示某一方向的投影;
++++2、叉乘:得到的是法向量;
++++3、标准化向量:用在只关系方向,不关心大小的时候;
###3C.K.03、矩阵相乘的意义及注意点? |
++3C.K.03、矩阵相乘的意义及注意点?
++++立钻哥哥:矩阵相乘:用于表示线性变换:平移、旋转、缩放、投影、仿射;
++++注意:矩阵的蠕变,误差的积累;
###3C.K.04、为什么dynamic font在unicode环境下由于static font? |
++3C.K.04、为什么dynamic font在unicode环境下优于static font?
++++立钻哥哥:Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。
++++使用动态字体时,Unity将不会预先生成一个有所有字体的字符纹理。
++++当需要支持亚洲语言或者较大的字体的时候,若使用正常纹理,则字体的纹理将非常大。
###3C.K.05、Render的作用? 描述MeshRender和SkinnedMeshRender的关系与不同? |
++3C.K.05、Render的作用? 描述MeshRender和SkinnedMeshRender的关系与不同?
++++立钻哥哥:Render是渲染器,渲染器可以使物体显示在屏幕上。
++++MeshRenderer是网格渲染,SkinnedMeshRender是蒙皮网格渲染器。
###3C.K.06、简述SkinnedMesh的实现原理? |
++3C.K.06、简述SkinnedMesh的实现原理?
++++立钻哥哥:SkinnedMesh的实现原理:骨骼蒙皮动画,模型本身是静态的,是因为通过蒙皮,使模型每个点都有Skin数据,Skin数据包括顶点受到哪些骨骼影响以及这些骨骼影响顶点的权重值,还有动画数据,有了Skin数据的模型就可以根据动画数据进行显示动画了。
###3C.K.07、为什么Unity3D中会发生:在组件上出现数据丢失的情况? |
++3C.K.07、为什么Unity3D中会发生:在组件上出现数据丢失的情况?
++++立钻哥哥:组件上会出现数据丢失:是因为组件上绑定的对象被删除了。
###3C.K.08、如何安全的在不同工程间安全地迁移Asset数据? 三种方式? |
++3C.K.08、如何安全的在不同工程间安全地迁移Asset数据? 三种方式?
++++立钻哥哥:1、将Assets目录和Library目录一起迁移;
++++2、导出包;
++++3、用Unity自带的Assets Server功能;
###3C.K.09、LOD是什么,优缺点是什么? |
++3C.K.09、LOD是什么,优缺点是什么?
++++立钻哥哥:LOD是Level of detail简称,意为多层次细节,是最常用的游戏优化技术,LOD技术指根据物体模型的节点在显示环境中所处的位置和重要性,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
++++优点:可根据距离动态的选择渲染不同细节的模型;
++++缺点:增加美工工作量,增大了游戏的容量;
###3C.K.10、两种阴影判断的方法、工作原理? |
++3C.K.10、两种阴影判断的方法、工作原理?
++++立钻哥哥:两种阴影:自身阴影、投射阴影;
++++【自身阴影】:因物体自身的遮挡而使光线照射不到它上面的某些可见面;
--工作原理:利用背面剔除的方法求出,即假设视点在点光源的位置;
++++【投射阴影】:因不透明物体遮挡光线使得场景中位于物体后面的物体或区域收不到光照照射而形成的阴影;
--工作原理:从光源处向物体的所有可见面投射光线,将这些面投射到场景中得到投射面,再将这些投射面与场景中的其他平面求交得出阴影多边形,保存这些阴影多边形信息,然后再按视点位置对场景进行相应处理得到所要求的视图;(利用空间换时间,每次只需依据视点位置进行一次阴影计算即可,省去了一次消隐过程)(若是动态光源此方法就无效了)
###3C.K.11、MipMap是什么,作用? |
++3C.K.11、MipMap是什么,作用?
++++立钻哥哥:MipMapping:在三维计算机图形的贴图渲染中常用的技术,为加快渲染进度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为MipMap。
###3C.K.12、用代码实现第三角色控制器? |
++3C.K.12、用代码实现第三角色控制器?
++++立钻哥哥:
###3C.K.13、Mecanim系统中,Body Mask的作用是? |
++3C.K.13、Mecanim系统中,Body Mask的作用是?
++++立钻哥哥:Mecanim系统中的Body Mask的作用:指定身体的某一部分是否参与渲染;
###3C.K.14、Unity连接数据库? |
++3C.K.14、Unity连接数据库?
++++立钻哥哥:Unity连接数据库需要得到:Mono.Data.Sqlite.dll文件和System.Data.dll文件;
###3C.K.15、如何优化内存? |
++3C.K.15、如何优化内存?
++++立钻哥哥:1、压缩自带类库;
++++2、将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;
++++3、释放AssetBundle占用的资源;
++++4、降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;
++++5、使用光照贴图;
++++6、使用多层次细节(LOD);
++++7、使用着色器(Shader);
++++8、使用预设体(Prefab)等;
###3C.K.16、您用过哪些插件? |
++3C.K.16、您用过哪些插件?
++++立钻哥哥:用过的插件:NGUI、DF、ITween等;
++++1、界面制作,推荐:NGUI;
++++2、2D游戏制作,推荐:2D ToolKit;
++++3、可视化编辑,推荐:PlayMaker;
++++4、插值插件,推荐:iTween,HOTween;
++++5、路径搜寻,推荐:Simple Path;
++++6、美术及动画制作,推荐:RageSpline,Smooth Moves;
++++7、画面增强,推荐:Bitmap2Material,Strumpy Shader Editor;
++++8、摄像机管理,推荐:Security Camera;
++++9、资源包,推荐:Nature Pack;
++++10、造路插件,推荐:EasyRoads3D;
###3C.K.17、在哪个模块下可以修改Render Path? |
++3C.K.17、在哪个模块下可以修改Render Path?
++++立钻哥哥:在以下模块可以修改Render Path:
++++1、Camera;
++++2、Light;
++++3、Render Settings;
++++4、ProjectSetting => Player => OtherSettings;
##3C.M、图形图像 |
++3C.M、图形图像
++++3C.M.01、什么是渲染管道?
++++3C.M.02、什么是矢量图?
++++3C.M.03、什么是矩阵? 矩阵运算?
++++3C.M.04、角度和弧度的转换?
++++3C.M.05、矢量标量?
###3C.M.01、什么是渲染管道? |
++3C.M.01、什么是渲染管道?
++++立钻哥哥:渲染管道是指在显示器上为了显示出图像而经过的一系列必要操作;
++++渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去;
++++主要有三步:应用程序阶段,几何阶段,光栅阶段;
###3C.M.02、什么是矢量图? |
++3C.M.02、什么是矢量图?
++++立钻哥哥:计算机中显示的图形一般可以分两大类:矢量图和位图。
++++【矢量图】:使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。
--例如:一幅花的矢量图形实际上是由线段形成外框轮廓,由外框的颜色以及外框所封闭的颜色决定花显示出的颜色。
--由于矢量图形可通过公式计算获得,所以矢量图形文件体积一般较小。
--矢量图形最大的优点是:无论放大、缩小或者旋转等都不会失真;
--矢量图形最大的缺点是:难以表现色彩层次丰富的逼真图像效果。
###3C.M.03、什么是矩阵? 矩阵运算? |
++3C.M.03、什么是矩阵? 矩阵运算?
++++立钻哥哥:【矩阵】:横轴排列的二维数据表格;
++++【矩阵运算】:
--矩阵加减:限制条件:行和列必须相同,对应相加相减得到结果;
--矩阵乘法:限制条件:要求左矩阵的行和右矩阵的列必须同,行数和左矩阵相等,列数和右矩阵相等,结果的第i行第j列,是左矩阵的第i行和右矩阵的第j列逐个相乘并把结果相加,得到结果是结果的 第i行第j列;
###3C.M.04、角度和弧度的转换? |
++3C.M.04、角度和弧度的转换?
++++立钻哥哥:1弧度 = 180度 / pi (约57.3)
++++1度 = pi / 180弧度 (约0.017)
###3C.M.05、矢量标量? |
++3C.M.05、矢量标量?
++++立钻哥哥:【矢量】:有方向,如力,速度;
++++【标量】:没有方向,如温度;
++++【单位向量】:有方向,大小为1的向量;
++++【矢量的加法】:是矢量的几何和,服从平行四边形规则;
++++【矢量满足交换律,满足结合律】;
++++在直接坐标系中,矢量等于其在坐标轴上投影的矢量之和(二维矢量可以看做三维矢量的特例,也就是说:三维成立,二维也成立)
++++【矢量减法】:大小相等,方向相反,称为逆矢量;
++++任意多个矢量首尾相连接组成闭合多边形,其结果必为0;
++++【矢量的乘法】:点积(內积、标量积)、叉积(外积)结果是矢量;
++++【点积方法】:dot;
#第四篇:Unity模拟面试 |
++++Unity面试题ABC:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++Unity面试题DEF:https://blog.csdn.net/VRunSoftYanlz/article/details/78630838
++立钻哥哥推荐的拓展学习链接(Link_Url):
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++++Unity面试题:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++Unity知识点0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012
++++Unity知识点0008:https://blog.csdn.net/VRunSoftYanlz/article/details/81153606
++++Unity引擎基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685
++++Unity面向组件开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平台开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034
++++UGUI基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693
++++UGUI进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882
++++UGUI综合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013
++++Unity动画系统基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068
++++Unity动画系统进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198
++++Navigation导航系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403
++++Unity数据存储:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite数据库:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162
++++WWW类和协程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559
++++Unity网络:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902
++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267
++++C#委托:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122
++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945
++++C#数据类型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默认的快捷键:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838
++++游戏相关缩写:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++设计模式简单整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641
++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++UML类图:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461
++++U3D_Shader编程(第一篇:快速入门篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader编程(第二篇:基础夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628
++++框架知识点:https://blog.csdn.net/VRunSoftYanlz/article/details/80862879
++++游戏框架(UI框架夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80781140
++++游戏框架(初探篇):https://blog.csdn.net/VRunSoftYanlz/article/details/80630325
++++Lua快速入门篇(基础概述):https://blog.csdn.net/VRunSoftYanlz/article/details/81041359
++++Lua快速入门篇(XLua教程):https://blog.csdn.net/VRunSoftYanlz/article/details/81141502
++++Lua快速入门篇(Xlua拓展):https://blog.csdn.net/VRunSoftYanlz/article/details/81173818
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
--_--RunSoft:lovezuanzuan--_--