转:https://blog.csdn.net/Sindywangkeai/article/details/77649471 locationNum=9fps=1
10:MeshRender中材质和共享材质有什么区别?
修改sharedMaterial将更改使用该材质的所有对象的外观,并且还将更改存储在项目中的材质设置。不建议修改sharedMaterial返回的材质。如果要修改渲染器的材质,请改用材质。
11:Unity提供了几种光源,它们是什么?
四种。
定向光: 定向光
点光源:Point Light
聚光灯:聚光灯
区域光:区域光
12:简单描述对象池。你认为FPS中的对象池适合什么用途?
对象池存放一块需要重复调用的空间。当一个对象大量生成时,每次销毁和创建都会非常耗时。对象池用于将暂时不用的对象放入池(即集合)中。 ),当想要重新生成这个对象时,首先去池中检查是否有可用的对象。如果有,直接取出来使用即可,无需再次创建。如果池中没有可用对象,则需要重新创建它。用空间交换时间,达到游戏的高速运行效果。 FPS游戏中经常被大量复制的物体包括子弹、敌人、粒子等。
十三:CharacterController和Rigidbody的区别
Rigidbody具有完全真实的物理特性。它是Unity中物理系统最基本的组成部分,包含常用的物理特性。 CharacterController可以说是一个有限的Rigidbody,具有一定的物理效果但并不完全真实。这正是Unity 想要实现的目标。打包的组件使开发人员能够轻松开发第一人称视角游戏。
十四:简述prefab的使用
游戏运行时实例化,prefab相当于一个模板,对你已有的材质、脚本、参数进行默认配置,方便以后修改。同时,预制打包的内容简化了导出操作,方便团队沟通。
十五:请简要描述sealed关键字在类声明和函数声明中使用时的作用。
密封类是密封类。当类被声明时,可以防止其他类继承这个类。在方法中声明它可以防止派生类重写此方法。
16:请简要描述私有、公共、受保护和内部之间的区别
公开:对任何班级和会员开放,无限制访问
private:仅对该类公开
protected:对该类及其派生类公开
内部:只能在包含该类的程序集中访问该类
十七:使用Unity3d实现2D游戏有多少种方式?
1.使用自己的GUI,Unity 4.6之后出现的UGUI
2.将相机的Projection值调整为Orthographic(正交投影),与z轴无关;
3.使用2d插件,如:2DToolKit、NGUI
十八:物体碰撞的整个过程中,有几个阶段,分别列出了对应的函数。
三个阶段,1.OnCollisionEnter 2.OnCollisionStay 3.OnCollisionExit
十九:Unity3d的物理引擎中,施加力的方式有多种,分别介绍。
rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函数中。你可以自己查看rigidbody的API。
二十:什么是链条接头?
铰链关节可以模拟两个物体用链条连接在一起的情况。它可以使两个物体在固定距离内相互移动而不产生任何力,但达到固定距离后会产生拉力。
二十一:用什么函数来旋转物体本身?
变换.旋转()
二十二:Unity3d提供了一个类(PlayerPrefs)用于保存和读取数据。请列出保存和读取塑料数据的功能。
PlayerPrefs.SetInt() PlayerPrefs.GetInt()
二十三:Unity3d脚本从觉醒到毁灭有一个比较完整的生命周期。请列出系统自带的几个重要方法。
Awake——OnEnableStart——Update——FixedUpdate——LateUpdate——OnGUI——OnDisable——OnDestroy
二十四:物理更新一般放在哪些系统功能中?
每绘制一个固定帧就会执行一次FixedUpdate。与Update不同的是,FixedUpdate是在渲染帧执行的。如果你的渲染效率较低,FixedUpdate 调用次数也会相应减少。 FixUpdate更适合物理引擎计算,因为它与每一帧的渲染相关。更新更适合控制。
二十五:如果场景中放置多个Camera并且同时处于活动状态,会发生什么情况?
游戏界面可以看到很多摄像头的混合体。
二十六:如何销毁一个UnityEngine.Object及其子类?
使用Destroy() 方法;
二十七:请描述Unity3d中组件出现数据丢失的原因。
通常绑定到组件的对象会被删除。
二十八:什么是LOD,它的优点和缺点是什么?
LOD(细节级别)是最常用的游戏优化技术。它根据模型的位置和重要性来决定对象渲染的资源分配,减少不重要对象的面数和细节,从而实现高效的渲染操作。缺点是增加了内存。
二十九:什么是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很好地解决了这个问题。屏幕分辨率适配的原理是计算屏幕的长宽比和原来预设的屏幕分辨率找到一个比较值,然后修改相机尺寸。 UGUI也通过锚点和中心点以及分辨率解决了这个问题
三十七:什么是LightMap?
LightMap:是指3D软件中的光照,然后将场景各个表面的光照渲染输出到贴图上,最后通过引擎粘贴到场景上,让物体有光照的感觉。
三十八: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#中的排序方法有哪些?
选择排序、冒泡排序、快速排序、插入排序、希尔排序、归并排序
四十四:碰撞物体射线检测原理是什么?
射线是从3D 世界中的一点向一个方向发射的一条无尽的线。当它与发射轨迹中的其他物体碰撞时,它将停止发射。
四十五:Unity中相机的裁剪平面有什么作用?调整Near和Fare值时需要注意什么?
剪裁平面。开始渲染和停止渲染时距相机的距离。
四十六:如何防止现有的GameObject在LoadLevel后被卸载?
void Awake(){ DontDestroyOnLoad(transform.gameObject);} 四十七:请简单描述一下GC(垃圾回收)的原因,并描述如何避免?
GC回收堆上的内存
避免: 1.减少new生成对象的次数
2.使用公共对象(静态成员)
3.用StringBuilder替换String
四十八:反射的实现原理是什么?
能够查看元数据并收集有关元数据的类型信息。实现原理:运行时根据程序集及其中的类型获取元数据。以下是实施步骤:
1.使用System.Reflection导入;
2.Assembly.Load("Assembly")加载程序集,返回类型为Assembly
3.获取程序集中所有类的名称
foreach (Type type in assembly.GetTypes()){ string t=type.Name;}4. Type type=assembly.GetType("Assembly.Class Name");获取当前类的类型
5. Activator.CreateInstance(类型);创建该类型的实例
6. MethodInfo mInfo=type.GetMethod("方法名称");获取当前方法
7. m.Info.Invoke(null, 方法参数);
四十九:简述四元数的作用以及四元数对于欧拉角的优点?
四元数用于表示旋转
相对欧拉角的优点:
1.能够进行增量旋转
2.避免通用锁
3.给定方向有两种表达方式,每种都是负数(欧拉角的表达方式有无数种)
五十:移动摄像机动作位于哪个函数中?为什么会出现在这个函数中呢?
LateUpdate 在所有更新完成后调用,更适合命令脚本的执行。官网上的例子是摄像头跟随。相机跟随是在所有更新操作完成后进行的。否则,摄像机可能已经前进,但视角中没有角色的空框。
第51章:GPU如何工作
简而言之,GPU图形(处理)管道完成以下工作:(不一定按以下顺序) 顶点处理:在此阶段,GPU读取描述3D图形外观的顶点数据,并确定3D图形的形状基于顶点数据的图形。和位置关系来建立3D 图形的骨架。在支持DX8和DX9规范的GPU中,这些任务是由硬件实现的Vertex Shader(定点着色器)完成的。光栅化计算:显示器上实际显示的图像是由像素组成的。我们需要将上面生成的图形上的点和线通过一定的算法转换成对应的像素。将矢量图形转换为一系列像素的过程称为光栅化。例如,对角线段的数学表示最终会转换为阶梯状的连续像素点。纹理映射:顶点单元生成的多边形仅构成3D物体的轮廓,而纹理映射完成多变形表面的映射。通俗地说,就是将相应的图片粘贴到多边形表面上,从而生成“逼真”的图形。 TMU(纹理映射单元)就是用来完成这项工作的。像素处理:在这个阶段(每个像素的光栅化期间)GPU完成像素的计算和处理,以确定每个像素的最终属性。在支持DX8和DX9规范的GPU中,这些任务由硬件实现的Pixel Shader完成。最终输出:ROP(光栅化引擎)最终完成像素的输出。一帧渲染完成后,会被发送到显存帧缓冲区。
总结:一般来说,GPU的工作就是完成3D图形的生成,将图形映射到对应的像素上,计算每个像素以确定最终的颜色并完成输出。
五十二:什么是渲染管线?
它是指为了在监视器上显示图像而进行的一系列必要的操作。渲染管道中的许多步骤都涉及将几何对象从一种坐标系转换到另一种坐标系。主要步骤是:
局部坐标-视图坐标-反向裁剪-光照-裁剪-投影-视图变换-光栅化
五十三:如何优化内存?
方法有很多,比如
1、压缩内置类库;
2、隐藏暂时不用的、以后需要用到的对象,而不是直接销毁;
3、释放AssetBundle占用的资源;
4.减少模型的边数,减少模型中的骨骼数量,减小纹理的尺寸;
5、使用光照贴图、使用多层次细节(LOD)、使用着色器(Shader)、使用预制件(Prefab)。
6.代码中生成的临时变量较少
五十四:如何动态加载资源?它们之间的区别
1.Resources.Load();
2.资产包
差异参考
五十五:请描述一下游戏动画有哪些类型及其原理?
主要包括关节动画、骨骼动画、单网格模型动画(关键帧动画)。
联合动画:将角色分为几个独立的部分,一个部分对应一个网格模型,各部分的动画连接成一个整体动画。人物性格更加灵活。 Quake2中使用了这种动画;
骨骼动画是一种广泛使用的动画方法,它综合了以上两种方法的优点。骨骼根据人物的特征形成一定的层次结构。它们通过关节连接,可以进行相对运动。皮肤充当骨骼外部的单个网格并决定角色。外貌;
单个网格模型动画由一个完整的网格模型组成。将每个顶点的原始位置及其变化量记录在动画序列的关键帧中,然后进行插值操作以达到动画效果,使角色动画更加逼真。
五十六:阿尔法混合如何工作
Alpha Blend实现了透明效果,但只能对某个区域进行alpha操作,并且透明度可以设置。
五十七:编写光照计算中diffuse的计算公式
漫反射=Kd x colorLight x max(N*L,0); Kd 漫反射系数,colorLight 光的颜色,N 单位法向量,L 单位指向光源的向量,其中N 为点乘以L,如果结果小于等于0,则漫反射为0。
五十八:影子判断的两种方法及工作原理。
本影和半影:参考本影和半影
本影:场景表面上不直接被光源照亮的区域(全黑、轮廓清晰的区域)。
半影:场景表面上被某些特定光源直接照亮但并非全部特定光源照亮的区域(半明半暗区域)
工作原理:将光源发出的光投射到物体的所有可见表面上,将这些表面投影到场景中得到投影面,然后将这些投影面与场景中的其他平面相交得到阴影多边形,并保存这些阴影多边形信息。然后根据视点位置对场景进行相应处理,得到所需的视图(用空间换时间,每次只需要根据视点位置进行一次阴影计算,省去了消隐过程)
五十九:什么是Vertex Shader以及如何计算?
顶点着色器是在GPU上执行的程序,用于替代固定管线中的变换和光照。顶点着色器主要操作顶点。
Vertex Shader 完成输入顶点从局部空间到齐次空间(齐次空间)的变换过程。齐次空间是投影空间的下一个空间。这期间有几个过程:世界变换、视图变换、投影变换和光照。
六十:下面的代码运行时会生成多少个临时对象?
字符串a=new string(\'abc\');a=(a.ToUpper() + \'123\').Substring(0, 2);在C#中,第一行就会报错(在Java中是可行的)。
它应该像这样初始化:
字符串b=new string(new char[]{'a','b','c'});
答案是:5个临时对象
六十一:下面的代码运行时会出现什么问题?如何避免呢?
列表ls=new List(new int[] { 1, 2, 3, 4, 5 }); foreach (ls 中的int item){ Console.WriteLine(item * item); ls.Remove(item);} 生成执行ls.Remove(item) 行中发生错误,因为foreach 是只读的。遍历时无法修改。
六十二:Unity3D支持编写多线程程序吗?如果支持的话需要注意什么?
Unity3D组件、对象和Unity3D系统调用只能从主线程访问
支持:如果要同时处理很多事情或者与Unity对象交互很少,可以使用线程,否则使用协程。
注意:C#中有一个lock关键字,用于保证在特定时间内只有一个线程可以访问特定对象。
六十三:Unity3D的协程和C#线程有什么区别?
多线程程序同时运行多个线程,在任何给定时间只有一个协程在运行,并且该正在运行的协程仅在必要时才被挂起。主线程以外的线程无法访问Unity3D对象、组件和方法。
Unity3d没有多线程的概念,但是unity也为我们提供了StartCoroutine(协程)和LoadLevelAsync(关卡异步加载)方法用于后台加载场景。 StartCoroutine 为什么叫协程?所谓协作,是指当你在StartCoroutine的函数体中处理一段代码时,使用yield语句来等待执行结果。在此期间,不影响主程序的继续执行,可以协同工作。
六十四:矩阵乘法的含义及注意点
用于表示线性变换:旋转、缩放、投影、平移、仿射
注意矩阵蠕变:误差的累积
六十五:为什么unicode环境下动态字体比静态字体好
Unicode是由国际组织制定的一种字符编码方案,可以容纳世界上所有的文字和符号。
使用动态字体时,Unity不会预先生成所有字体的字符纹理。当需要支持亚洲语言或者更大的字体时,如果使用普通纹理,字体纹理会很大。
六十六:当一个高速运动的小物体与另一个较大的物体相撞时会发生什么?如何避免呢?
穿透(碰撞检测失败)
六十七:请简单描述一下OnBecameVisible和OnBecameInvisible的发生时机,以及这对回调函数的意义?
当切换对象是否可见时。可用于仅当对象可见时才需要执行的计算。
六十八:什么是动态批处理?与静态批处理有什么区别?
如果动态对象共享相同的材质,Unity 会自动批处理这些对象。动态批处理操作自动完成,不需要您执行额外的操作。
区别:动态批处理中的一切都是自动的,不需要任何操作,并且可以移动对象,但有很多限制。静态批处理:自由度高,限制少。缺点可能是占用内存较多,并且所有静态批处理后的对象都无法再移动。
参考
六十九:简述StringBuilder和String的区别?
字符串是字符串常量。
StringBuffer是一个字符串变量并且是线程安全的。
StringBuilder 是一个字符串变量,并且是线程不安全的。
String 类型是不可变对象。每次改变一个String时,都需要生成一个新的String对象,然后指针指向一个新的对象。如果一个对象在循环中不断变化,那么它也必须不断变化。生成新的对象,所以效率很低。建议不要使用String 类型,因为String 对象不断变化。
StringBuilder对象在执行字符串连接操作时会修改原始字符串,从而提高性能。我们在日常使用中可能都知道这一点。当连接操作频繁时,使用StringBuilder对象。
七十:Unity3D Shader有哪些类型,有什么区别?
表面着色器具有更高的抽象级别,可以轻松地以简洁的方式实现复杂的着色。表面着色器在前向和延迟渲染模式下都能正常工作。
顶点片段着色器可以非常灵活地达到想要的效果,但是需要编写更多的代码,并且很难与Unity的渲染管线完美集成。
固定功能管线着色器可用作前两个着色器的备份选项。当硬件无法运行那些很酷的Shaders时,你还可以使用固定功能的管线着色器来绘制一些基本的内容。
七十一:已知strcpy函数的原型为:char * strcpy(char * strDest, const char * strSrc); 1、实现strcpy函数,不调用库函数。 2.解释为什么返回char *
char * strcpy(char * strDest,const char * strSrc){ if ((strDest==NULL)||(strSrc==NULL)) throw \'无效参数\'; char * strDestCopy=strDest; while ( (*strDest++=*strSrc++)!='\0'); return strDestCopy;}72: C# 中的四个访问修饰符是什么?有什么不同?
1. 属性修饰符2. 访问修饰符3. 类修饰符4. 成员修饰符。
属性修饰符:
可序列化:按值将对象编组到远程服务器。
STATread:表示单线程套件,是一种线程模型。
MATAThread:意思是多线程套件,也是一种线程模型。
访问修饰符:
公共:不受限制的访问。
private:只有包含该成员的类才能访问它。
内部:只有当前项目可以访问它。
protected:只有包含该成员的类和派生类才能访问它。
类修饰符:
抽象:抽象类。表示一个类只能作为其他类的基类。
密封:密封类。表示类不能被继承。当然,密封类不能同时是抽象类,因为抽象总是希望被继承。
会员修改器:
Abstract:表示该方法或属性未实现。
密封:密封方法。可以防止此方法在派生类中被重写。并非类的每个成员方法都可以用作密封方法。必须重载基类的虚方法来提供具体的实现方法。因此,在方法的声明中,sealed修饰符总是与override修饰符一起使用。
代表:代表。用于定义函数指针。 C#中的事件驱动是基于委托+事件。
const:指定该成员的值是只读的,不允许修改。
事件:声明一个事件。
extern:表示该方法是外部实现的
现。 override:重写。对由基类继承成员的新实现。 readonly:指示一个域只能在声明时以及相同类的内部被赋值。 static:指示一个成员属于类型本身,而不是属于特定的对象。即在定义后可不经实例化,就可使用。 virtual:指示一个方法或存取器的实现可以在继承类中被覆盖。 new:在派生类中隐藏指定的基类成员,从而实现重写的功能。 若要隐藏继承类的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它。 七十三:Heap与Stack有何区别? 1.heap是堆,stack是栈。 2.stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,heap常用new关键字来分配。 3.stack空间有限,heap的空间是很大的自由区。 七十四:值类型和引用类型有何区别? 1.值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。 2.值类型存取速度快,引用类型存取速度慢。 3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用 4.值类型继承自System.ValueType,引用类型继承自System.Object 5.栈的内存分配是自动释放;而堆在.NET中会有GC来释放 6.值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。 七十五:请写出求斐波那契数列任意一位的值得算法 递归实现: int Fib1(int index){ if(index迭代实现: int Fib5(int index){ if(index参看更多实现方法 七十六:协同程序的执行代码是什么?有何用处,有何缺点? function Start() { // 协同程序WaitAndPrint在Start函数内执行,可以视同于它与Start函数同步执行. StartCoroutine(WaitAndPrint(2.0)); print (\"Before WaitAndPrint Finishes \" + Time.time );} function WaitAndPrint (waitTime : float) { // 暂停执行waitTime秒 yield WaitForSeconds (waitTime); print (\"WaitAndPrint \"+ Time.time );} 作用:一个协同程序在执行过程中,可以在任意位置使用yield语句。yield的返回值控制何时恢复协同程序向下执行。协同程序在对象自有帧执行过程中堪称优秀。协同程序在性能上没有更多的开销。 缺点:协同程序并非真线程,可能会发生堵塞。 七十七:什么是里氏代换元则? 里氏替换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。通俗点:就是子类对象可以赋值给基类对象,基类对象不能赋值给子类对象 参考 七十八:Mock和Stub有何区别? Mock与Stub的区别:Mock:关注行为验证。细粒度的测试,即代码的逻辑,多数情况下用于单元测试。Stub:关注状态验证。粗粒度的测试,在某个依赖系统不存在或者还没实现或者难以测试的情况下使用,例如访问文件系统,数据库连接,远程协议等。 七十九:概述序列化: 序列化简单理解成把对象转换为容易传输的格式的过程。比如,可以序列化一个对象,然后使用HTTP通过Internet在客户端和服务器端之间传输该对象 八十:堆和栈的区别? 栈通常保存着我们代码执行的步骤,如在代码段1中 AddFive()方法,int pValue变量,int result变量等等。而堆上存放的则多是对象,数据等。我们可以把栈想象成一个接着一个叠放在一起的盒子。当我们使用的时候,每次从最顶部取走一个盒子。栈也是如此,当一个方法(或类型)被调用完成的时候,就从栈顶取走,接着下一个。堆则不然,像是一个仓库,储存着我们使用的各种对象等信息,跟栈不同的是他们被调用完毕不会立即被清理掉。 八十一:概述c#中代理和事件? 代理就是用来定义指向方法的引用。 C#事件本质就是对消息的封装,用作对象之间的通信;发送方叫事件发送器,接收方叫事件接收器 八十二:客户端与服务器交互方式有几种? socket通常也称作”套接字”,实现服务器和客户端之间的物理连接,并进行数据传输,主要有UDP和TCP两个协议。Socket处于网络协议的传输层。 http协议传输的主要有http协议 和基于http协议的Soap协议(web service),常见的方式是 http 的post 和get 请求,web 服务。 八十三:Unity和Android与iOS如何交互? Unity可以到处Android和iOS的工程,然后通过安卓或者iOS的类去给Unity发消息,调用Unity中的方法 八十四:如何在Unity3D中查看场景的面试,顶点数和Draw Call数?如何降低Draw Call数? 在Game视图右上角点击Stats。降低Draw Call 的技术是Draw Call Batching 这个在5.0以后在window-》Profiler下面,快捷键是cmd + 7(ctl + 7 八十五:请问alpha test在何时使用?能达到什么效果? Alpha Test ,中文就是透明度测试。简而言之就是V&F shader中最后fragment函数输出的该点颜色值(即上一讲frag的输出half4)的alpha值与固定值进行比较。AlphaTest语句通常于Pass{}中的起始位置。Alpha Test产生的效果也很极端,要么完全透明,即看不到,要么完全不透明。 八十六:UNITY3d在移动设备上的一些优化资源的方法 1.使用assetbundle,实现资源分离和共享,将内存控制到200m之内,同时也可以实现资源的在线更新 2.顶点数对渲染无论是cpu还是gpu都是压力最大的贡献者,降低顶点数到8万以下,fps稳定到了30帧左右 3.只使用一盏动态光,不是用阴影,不使用光照探头 粒子系统是cpu上的大头 4.剪裁粒子系统 5.合并同时出现的粒子系统 6.自己实现轻量级的粒子系统 animator也是一个效率奇差的地方 7.把不需要跟骨骼动画和动作过渡的地方全部使用animation,控制骨骼数量在30根以下 8.animator出视野不更新 9.删除无意义的animator 10.animator的初始化很耗时(粒子上能不能尽量不用animator) 11.除主角外都不要跟骨骼运动apply root motion 12.绝对禁止掉那些不带刚体带包围盒的物体(static collider )运动 NUGI的代码效率很差,基本上runtime的时候对cpu的贡献和render不相上下 13每帧递归的计算finalalpha改为只有初始化和变动时计算 14去掉法线计算 15不要每帧计算viewsize 和windowsize 16filldrawcall时构建顶点缓存使用array.copy 17.代码剪裁:使用strip level ,使用.net2.0 subset 18.尽量减少smooth group 19.给美术定一个严格的经过科学验证的美术标准,并在U3D里面配以相应的检查工具 八十七:四元数有什么作用? 对旋转角度进行计算时用到四元数 八十八:将Camera组件的ClearFlags选项选成Depth only是什么意思?有何用处? 如果把摄像机的ClearFlags勾选为Deapth Only,那么摄像机就会只渲染看得见的对象,把背景会完全透明,这种情况一般用在两个摄像机以上的场景中 八十九:在编辑场景时将GameObject设置为Static有何作用? 设置游戏对象为Static时,这些部分被静态物体挡住而不可见时,将会剔除(或禁用)网格对象。因此,在你的场景中的所有不会动的物体都应该标记为Static。 九十:有A和B两组物体,有什么办法能够保证A组物体永远比B组物体先渲染? 把A组物体的渲染对列大于B物体的渲染队列,通过shader里面的渲染队列来渲染 九十一:将图片的TextureType选项分别选为““Texture”和“Sprite”有什么区别 Sprite作为UI精灵使用,Texture作用模型贴图使用。Sprite需要2的整次幂,打包图片省资源 九十二:问一个Terrain,分别贴3张,4张,5张地表贴图,渲染速度有什么区别?为什么? 没有区别,因为不管几张贴图只渲染一次。 九十三:什么是DrawCall?DrawCall高了又什么影响?如何降低DrawCall? Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call。DrawCall越高对显卡的消耗就越大。降低DrawCall的方法: 1. Dynamic Batching 2. Static Batching 3. 高级特性Shader降级为统一的低级特性的Shader。 九十四:实时点光源的优缺点是什么? 可以有cookies – 带有 alpha通道的立方图(Cubemap )纹理。点光源是最耗费资源的。 九十五:Unity的Shader中,Blend SrcAlpha OneMinusSrcAlpha这句话是什么意思? 作用就是Alpha混合。公式:最终颜色 = 源颜色 x 源透明值 + 目标颜色 x(1 - 源透明值) 九十六:简述水面倒影的渲染原理 原理就是对水面的贴图纹理进行扰动,以产生波光玲玲的效果。用shader可以通过GPU在像素级别作扰动,效果细腻,需要的顶点少,速度快 九十七:简述NGUI中Grid和Table的作用? 对Grid和Table下的子物体进行排序和定位 九十八:请简述NGUI中Panel和Anchor的作用 1. 只要提供一个half-pixel偏移量,它可以让一个控件的位置在Windows系统上精确的显示出来(只有这个Anchor的子控件会受到影响) 2. 如果挂载到一个对象上,那么他可以将这个对象依附到屏幕的角落或者边缘 3.UIPanel用来收集和管理它下面所有widget的组件。通过widget的geometry创建实际的draw call。没有panel所有东西都不能够被渲染出来,你可以把UIPanel当做Renderer 九十九:能用foreach遍历访问的对象需要实现_接口或声明____方法的类型 IEnumerable;GetEnumerator 第二部分 1.以下哪一个选项不属于Unity引擎所支持的视频格式文件(D) A.后缀为mov的文件 B.后缀为mpg的文件 C.后缀为avi的文件 D.后缀为swf的文件 2.Unity引擎使用的是左手坐标系还是右手坐标系(A) A.左手坐标系 B.右手坐标系 C.可以通过ProjectSetting切换右手坐标系 D.可以通过Reference切换左手坐标系 3.什么是导航网格(NavMesh)(B) A.一种用于描述相机轨迹的网格 B.一种用于实现自动寻址的网格 C.一种被优化过的物体网格 D.一种用于物理碰撞的网格 4.下列选项中有关Animator的说法错误的是?(D) A.Animator是Unity引擎中内置的组件 B.任何一个具有动画状态机功能的GameObject都需要一个Anim组件 C.它主要用于角色行为的设置,包括StateMachine、混合树BlendTrees以及同通过脚本控制的事件 D.Animator同Animation组件的用法是相同的 5.Application.loadLevel命令为(A) A.加载关卡 B.异步加载关卡 C.加载动作 D.加载动画 6.下列选项中,关于Transform组件的Scale参数描述正确的是(A) A.Transform组件的Scale参数不会影响ParticleSystem产生粒子的大小 B.Transform组件的Scale参数不会影响GUITexture的大小 C.添加Collider组件后的GameoObject,其 Collider 组件的尺寸不受Transform组件的Scale参数影响 D.添加Rigidbody组件后的物体,大小将不再受Transform组件中 Scale 参数的影响 7.在 Unity 中的场景中创建 Camera 时,默认情况下除了带有Transform、Camera、GUILayer、Flare Layer 组件之外,还带有以下哪种组件(C) A.Mouse Look B.FPS Input Controller C.Audio Listener D.Character Motor 8.如果将一个声音剪辑文件从Project 视图拖动到 Inspector 视图或者 Scene 视图中的游戏对象上,该游戏对象会自动添加以下哪种组件(C) A.Audio Listener B.Audio Clip C.Audio Source D.Audio Reverb Zone 9.下列叙述中有关 Prefab 说法错误的是哪一项(B) A.Prefab 是一种资源类型 B.Prefab 是一种可以反复使用的游戏对象 C.Prefab 可以多次在场景进行实例 D.当一个 Prefab 添加到场景中时,也就是创建了它的一个实例 10.关于 MonoBehaviour.LateUpdate 函数描述错误的是:(B) A.当 MonoBehaviour 类被启用后,每帧调用一次 B.常被用于处理 Rigidbody 的更新 C.在所有 Update 函数执行后才能被调用 D.常被用于实现跟随相机效果,且目标物体的位置已经在 Update 函数中被更新 11.下列哪个函数不属于碰撞事件(C) A.OnCollisionEnter B.OnCollisionExit C.OnCollisionUpdate D.OnCollisionStay 12.以下关于 MonoBehaviour.OnGUI()的描述错误的是(D) A.如果 MonoBehaviour 没有被启用,则OnGUI函数不会被调用 B.用于绘制和处理 GUI events C.每帧可能会被绘制多次,每次对应于一个 GUI event D.每帧被调用一次 13.以下哪组摄像机中 Normalized View Port Rect 的数值设置可以使摄像机显示的画面位于1280*720分辨率的屏幕画面右上角(D) A.X=640,Y=360,W=640,H=360 B.X=640,Y=0,W=640,H=360 C.X=0,Y=0,W=0.5,H=0.5 D.X=0.5,Y=0.5,W=0.5,H=0.5 14.在Unity引擎中,Collider所指的是什么(D) A.collider 是Unity引擎中所支持的一种资源,可用作存储网格信息 B.Collider 是Unity引擎中内置的一种组件,可用对网格进行渲染 C.Collider 是Unity引擎中所支持的一种资源,可用作游戏对象的坐标转换 D.Collider 是Unity引擎中内置的一种组件,可用作游戏对象之间的碰撞检测 15.以下关于WWW.LoadFromCacheOrDownload描述正确的是(C) A.可被用于将 Text Assets 自动缓存到本地磁盘 B.可被用于将 Resource 自动缓存到本地磁盘 C.可被用于将 Asset Bundles 自动缓存到本地磁盘 D.可被用于将任意格式的Unity资源文件自动缓存到本地磁盘 16.如何实现加载外部视频并播放? 外部视频文件:目前测试仅支持ogg格式(设置网络获取视频时,必须将MIME设置.ogg为application/octet-stream) 场景设置:MainCamera上添加AudioSource脚本;播放物体上(如Plane)添加MovieTest脚本 MovieTest脚本: 17.游戏对象B是游戏对象A的子物体,游戏对象A经过了旋转,请写出游戏B围绕自身的Y轴进行旋转的脚本语句,以及游戏对象B围绕世界坐标的Y轴旋转的脚本语句。 绕世界坐标旋转:transform.Rotate (transform.up*speed*Time.deltatime); 绕自身Y轴旋转:transform.Rotate (Vector.up*speed*Time.deltatime); 18.Unity中用过哪些插件?具体功能 FXMaker,制作粒子特效;NGUI,制作2D界面;EasyTouch,摇杆;shaderForge,制作shader;Itween,制作动画; 19.当删除Unity工程Assets目录下地meta文件时会导致什么?为什么? 会导致在场景中游戏对象看不到,或者报错,材质找不到资源。多人协作的时候会导致资源的重复产生。因为每个资源文件都对应一个.meta文件,这个.meta文件中的guid就是唯一标识这个资源的。材质就是通过这个guid来记录自己使用了那些资源,而且同一个资源的guid会因为不同的电脑而不同,所以当你上传了丢失了.meta文件的资源的时候,到了别人的机器上就会重新产生guid,那个这个资源就相当于垃圾了。 20.频繁创建GameObject会降低程序性能为什么?怎么解决? 频繁创建游戏对象,会增加游戏的Drawcall数,降低帧率,GPU会一直在渲染绘制。可以通过对象池来管理对象:当需要创建一个游戏对象时,先去对象池中查找一下对象池中是否存在没有被正在使用的对象,如果有的话直接使用这个对象,并把它标记为正在使用,没有话就创建一个,并把它添加到池中,然后标记为使用中。一个游戏对象使用完毕的时候,不要销毁掉,把它放在池中,标记为未使用。 ——————————-21.关于Vector3 的API,以下说法正确的是(BC) A.Vector3.normalize 可以获取一个三维向量的法线向量 B.Vector3.magnitude 可以获取一个三维向量的长度 C.Vector3.forward 与 Vector3(0,0,1)是一样的意思 D.Vector3.Dot(向量A,向量B)是用来计算向量A与向量B的叉乘 22.以下哪个函数在游戏进入新场景后会被马上调用(B) A.MonoBehaviour.OnSceneWastLoaded() B.MonoBehaviour.OnSceneEnter() C.MonoBehaviour.OnLevelEnter() D.MonoBehaviour.OnLevelWastLoaded() 23.采用Input.mousePosition 来获取鼠标在屏幕上的位置,以下表达正确的是(C) 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.Width) 24.如何通过脚本来删除其自身对应的Gameobject(A) A.Destroy(gameObject) B.this.Destroy() C.Destroy(this) D.其他三项都可以 25.某个GameObject有一个名为MyScript的脚本,该脚本中有一个名为DoSomething 的函数,则如何在该Gameobject的另外一个脚本中调用该函数?(A) A.GetComponent().DoSomething() B.GetComponent C.GetComponent().Call(“DoSomething”) D.GetComponent 26.Animator.CrossFade 命令作用是:(B) A.动画放大 B.动画转换 C.Update() D.OnMouseButton() 27.OnEnable,Awake,Start 运行时的发生顺序?(A) A.Awake->OnEnable->Start B.Awake->Start->OnEable C.OnEnable-Awake->Start D.Start->OnEnable->Awake 28.以下选项中,正确的是(D) A.Mathf.Round方法作用是限制 B.Mathf.Clamp方法作用是插值 C.Mathf.Lerp方法作用是四舍五入 D.Mathf.Abs方法作用是取得绝对值 29.以下选项中,将游戏对象绕Z轴逆时针旋转90度(C) A.transform.rotation = Quaternion.Euler(0,0,90) B.transform.rotation = Quaternion.Angle(0,0,90) C.transform.Rotate(new Vector3(0,0,90)) D.transform.Rotate(new Vector3(90,0,0)) 30.public static function InitializeServer(connections:int,listenPort:int,useNat:bool):NetworkConnectionError;解释一下函数,参数以及返回值的意思。 初始化服务器。connections是允许的入站连接或玩家的数量,listenPort是要监听的端口,useNat设置NAT穿透功能。如果你想要这个服务器能够接受连接使用NAT穿透,使用facilitator,设置这个为true。如果有错误会有返回错误。 31.请写出以下函数的含义和运算结果 delegate b Func(a a1);static void Main(string[] args){ Func mFunc = x => x == 5; Console.WriteLine(mFunc(6));}false,就是定义一个delegate,返回值类型为 b,有一个参数,类型为a。 32.编写一个函数,输入一个32位整数,计算这个整数有多少个bit为1. uint BitCount (uint n){ uint c = 0; // 计数器 while (n > 0) { if ((n & 1) == 1) // 当前位是1 ++c; // 计数器加1 n >>= 1; // 移位 } return c;}33.某游戏中的装备系统有16种附加属性,每种附加属性使用一个32位的ID表示(比如10001表示加人物hp的附加属性,10002表示加人物mp的附加属性),一件装备做多有4个附加属性,请写一个程序输出所有附加属性的组合。 # 34.请实现如下函数,在Unity中有一副骨骼树,请使用递归方式与非递归方式实现先序遍历,在Unity的Console输出所有骨骼名。 可能用到的函数 public Transform GetChild(int index);public int Transform.childCountpublic void OutputTree(Transform root){}# 35.简要解释下数据库中ACID的含义。 ACID是指在可靠数据库管理系统(DBMS)中,事务所具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如:对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNT表中aaa和bbb的存款总额为2000元。 隔离性多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。这指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。 持久性,意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。即使出现了任何事故比如断电等,事务一旦提交,则持久化保存在数据库中。 36.32位整数256和255按位异或后的结果是(511) 37.unix/linux 系统将所有的I/O设备模型化为文件,c语言中的(stdin),(stdout)和(stderr)分别表示标准输入,标准输出,标准错误。 38.k层二叉树最多有 2^k - 1 个结点。 39.中缀算式(8 + x*y)-2x/3的后缀算式是_。 40.对以下二叉树进行前序遍历的结果是(ABDGCEHF) 41.写出一个C类ip地址(192.168.1.105),该ip地址一个合法的网格掩码是(255.255.255.224). 42.c/c++程序运行时有堆内存与栈内存之分,请写一个语句在堆中分配一个整数:(int a = new int(4)),在栈内存中分配一个整数:(int a = 5)。 43.简述从C/C++源代码生成可执行文件所经历的几个过程和每个过程中所做的事情。 预编译-》编译-》链接-》执行 44.简述TCP建立连接的过程,最好能画出时序图。 三次握手; 45.有一个c语言函数 unsigned int getN(unsigned int v){ v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v;}请问这个函数的功能是什么? 返回的结果是v 或者 2 ^ 跟下v次方 + 1(比如125返回128,128返回的就是128) 46.列出c语言中static关键字的用法。 static 关键字至少有下列几个作用: (1)函数体内static 变量的作用范围为该函数体,不同于auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; (2)在模块内的static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问; (3)在模块内的static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内; (4)在类中的static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝; (5)在类中的static 成员函数属于整个类所拥有,这个函数不接收this 指针,因而只能访问类的static 成员变量。 47.解释一下Unity3D中的协程(coroutine)是什么?并举例说明 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足。 48.物体自旋转使用的函数叫什么?物体绕某点旋转使用函数叫什么? 物体自旋转函数transform.Rotate,物体绕某点旋转函数:transform.RotateAround 49.使用prefab预制物体有什么好处? 1.Prefab一个重要的优势就是编辑prefab资源后,场景中所有使用Prefab克隆的游戏对象将全部使用新编辑的资源,无需一个一个的给场景中的对象赋值。 2.当游戏中需要频繁创建一个物体时,使用Prefab能够节省内存。 3.当你在一个场景中增加一个Prefabs,你就实例化了一个Prefabs。 50.设有如下关系表R1和R2 R1(NO, NAME, SEX, AGE, CLASS) R2(NO, SUBJECT, SCORE) 主关键字是NO,其中NO为学号,NAME为姓名,SEX为性别,AGE为年龄,CLASS为班号,SUBJECT为科目,SCORE为成绩。写出实现下列功能的SQL语句。查找学号为20的学生的姓名,科目,成绩。 SELECT NAME,SUBJECT,SCORE FORM R1 INNER JOIN R2 ON R1.NO=R2.NO WHERE R1.NO = 20 51.描述多人联网中位置的同步和聊天通讯的实现方法,并编程写出如何实现多人协同中交互操作。(交互操作例如,血值为100的两个角色人物可以相互射击双方,射击一次减去血值10,当血值为0的时候证明已经死亡) # 52.当实例化一个prefab对象,prefab对象上面挂载了一个继承MonoBehaviour的脚本 1.请问这个脚本分别会按顺序调用哪些函数,并列出哪些函数是反复进去的 # 2.请问当这个实例化对象先调用了SetActive(false),然后又调用了SetActive(true),那么这个脚本依次会调用哪些函数方法? # 3.如果在脚本的Awake()函数中,调用了this.gameObject.AddComponent()(PS:GameController为另一个继承Mono的脚本类),请问此时脚本函数的调用顺序是否发生变化? 53.if(go.CompareTag(“Enemy”))和if(go.tag == “Enemy”)两种判断方法哪种是合适的,为什么? 第一种合适,因为第二种会占用更多内存。 54.DestroyImmediate和Destroy的区别是? DestroyImmeditate 销毁对象的时候,会立即释放资源。Destroy只是从该场景销毁,但是还在内存当中。 55.详细说明Unity中资源加载的方法,以及他们的区别? 1.通过Resources模块,调用它的load函数:可以直接load并返回某个类型的Object,前提是要把这个资源放在Resource命名的文件夹下,Unity不关有没有场景引用,都会将其全部打入到安装包中。 2.通过bundle的形式:即将资源打成 asset bundle 放在服务器或本地磁盘,然后使用WWW模块get 下来,然后从这个bundle中load某个object。 56.从代码角度上如何进行内存优化? # 57.分别写出Invoke和协程的几种用法? # 58.以下函数的功能是计算斐波那契数列的第n项,请填空 int func(int n){ if(n<=2) return 1; return n + func(n-1);}59.C语言中宏定义中若有多行,可以使用字符(\). 60.C语言中32位整数能表达的最小的数是-2^31~2^31-1. 61.使用(点乘)向量运算可以很方便地计算出三维空间中两个单位向量之间夹角的cos值。 62.类unix系统中某文件的权限为:drw-r–r–,用八进制数值形式表示该权限为(411),首位d代表目录(文件夹) 63.若有如下程序段,其中s,a,b,c均已定义为整型变量,且a,c均已赋值(c大于0) s = a;for(b = 1; b <= c; b++) s = s + 1;则与上述程序段功能等价的赋值语句是(B) A.s = a + b B.s = a + c C.s = s + c D.s = b + c 64.简述static和const关键字的作用 static 关键字至少有下列几个作用: (1)函数体内static 变量的作用范围为该函数体,不同于auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; (2)在模块内的static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问; (3)在模块内的static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内; (4)在类中的static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝; (5)在类中的static 成员函数属于整个类所拥有,这个函数不接收this 指针,因而只能访问类的static 成员变量。 const 关键字至少有下列几个作用: (1)欲阻止一个变量被改变,可以使用const 关键字。在定义该const 变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了; (2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const; (3)在一个函数声明中,const 可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值; (4)对于类的成员函数,若指定其为const 类型,则表明其是一个常函数,不能修改类的成员变量 ; (5)对于类的成员函数,有时候必须指定其返回值为const 类型,以使得其返回值不为“左值”。 65.用你熟悉的语言及你认为最简洁的方法书写计算 s = 1!+2!+3!+…+num!的代码。num为输入,s为输出。(!代表阶乘 3!= 1 * 2 * 3 66.用你熟悉的语言从一个字符串中去掉相连的重复字符,例如原字符串“adffjkljaalkjhl”变为“adfjkljalkjhl” 第三部分1.哪种实时光源是Unity中没有的?(D) A.点光源 B.方向光 C.聚光灯 D.日光灯 2.如何在Unity中创建地形系统?(D) A.Terrain->Create Terrain B.Component->Create Terrain C.Asset->Create Terrain D.Windows->Create Terrain 3.以下哪种操作步骤可以在场景中添加“Wind Zone” (B) A.Terrain->Wind Zone B.GameObject->Create other->Wind Zone C.Component->Physics->Wind Zone D.Assets->Create->Wind Zone 4.在Unity编辑器中创建一个Directional Light,以下步骤正确的是?(B) A.Edit->Rendering Setting->Directional Light B.GameObject->Create Other->Directional Light C.Component->Rendering->Directional Light D.Assets->Directional Light 5.下列哪一项不属于Camera中的“Clear Flags”?(D) A.Skybox B.Solid Color C.Depth Only D.Background 6.以下哪种脚本语言是Unity编辑器所不支持的?(D) A.Javascript B.C# C.Boo D.Perl 7.对于Prefab,以下说法错误的是?(D) A.Prefab资源可以在项目中多次重复使用 B.由Prefab实例出的GameObject,其在Hierarchy试图中表现为蓝色 C.Prefab上的组件信息一经改变,其实例出的GameObject也会自动改变 D.实例出的GameObject上的组件信息一经改变,其对应出的Prefab也会自动改变 8.下面哪种做法可以打开Unity的Asset Store?(A) A.Windows->Asset Store B.Edit->Asset Store C.File->Asset Store D.Assets->Asset Store 9.在哪个面板中可以修改物体的空间属性,如位置,朝向,大小等(B) A.Project B.Inspector C.Hierarchy D.Toolbar 10.如何为一个Asset 资源设定一个Label,从而能够方便准确的搜索到?(D) A.在Project窗口中选中一个Asset,右键->Create->Label B.在Project窗口中选中一个Asset,右键->Add Label C.在Project窗口中选中一个Asset,在Inspector窗口中点击添加Label的图标 D.在Project窗口中选中一个Asset,在Inspector窗口中点击按钮“Add Label” 11.Mecanim系统中,Body Mask的作用是?(D) A指定身体的某一部分是否参与骨骼动画 B.指定身体的某一部分是否参与物理模拟 C.指定身体的某一部分是否可以输出骨骼信息 D.指定身体的某一部分是否参与渲染 12.以下哪种操作步骤可以打开Unity编辑器的Lightmapping视图?(C) A.File->Lightmapping B.Assets->Lightmapping C.Windows->Lightmapping D.Component->Lightmapping 13.下列关于光照贴图,说法错误的是?(C) A.使用光照贴图比使用实时光源渲染要快 B.可以降低游戏内存消耗 C.可以增加场景真实感 D.多个物体可以使用同一张光照贴图 14.如何为物体添加光照贴图所使用的UV (B) A.不用添加,任何时候都会自动生成 B.更改物体导入设置,勾选“Generate Lighting UVs” C.更改物体导入设置,勾选“Swap UVs” D.更改物体导入设置,在UVs选项中选择“Use Lightmaps” 15.在哪个模块下可以修改Render Path?(A) A.Camera B.Light C.Render Settings D.Project Setting->Quality 16.以下哪项技术下不是目前Unity所支持的Occlusion Culling技术?(D) A.PVS only B.PVS and dynamic objets C.Automatic Portal Generation D.Dynamic Only 17.关于Vector3的API,以下说法正确的是?(C) A.Vector3.normalize可以获取一个三维向量的法线向量 B.Vector3.magnitude可以获取一个三维向量的长度 C.Vector3.forward与Vector3(0,0,1)是一样的 D.Vector3.Dot(向量A,向量B)是用来计算向量A与向量B的叉乘 18.下列那些选项不是网格层属性的固有选项?(B) A.Default B.Walkable C.Not Walkable D.Jump