它是指为了在监视器上显示图像而进行的一系列必要的操作。 渲染管道中的许多步骤都涉及将几何对象从一种坐标系转换到另一种坐标系。
主要步骤是:
局部坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化。
2.如何优化内存?
方法有很多,比如
1、压缩内置类库;
2、隐藏暂时不用的、以后需要用到的对象,而不是直接销毁;
3、释放AssetBundle占用的资源;
4.减少模型的边数,减少模型中的骨骼数量unity 物体绕自身旋转,减小纹理的尺寸;
5、使用光照贴图、使用多层次细节(LOD)、使用着色器(Shader)、使用预制件(Prefab)。
3、如何动态加载资源?
1.Resources.Load();
2.资产包
1.通过Resources模块,调用其load函数:可以直接加载并返回某个类型的Object。 前提是把这个资源放在名为Resource的文件夹中。 无论是否有场景引用,Unity 都会存储所有内容。 将其输入到安装包中。 资源.Load();
2、bundle形式:将资源打成一个asset包放到服务器或者本地磁盘上,然后使用WWW模块获取,然后从这个bundle中加载一个对象。 资源包
3、通过AssetDatabase.loadasset:该方法仅在编辑器范围内有效。 游戏运行时此功能不存在。 通常用于开发过程中的调试。
[AssetDatabase资源数据库]
区别:Resources方式需要将所有资源放入安装包中,不利于游戏的分包发布(微客户端)和版本升级(补丁),所以Unity推荐的方式是不使用使用捆绑方法。 相反,请将资源放入几个小包中,然后加载您使用的任何一个。 通过这种方式,您还可以分包版本和补丁。 但是unity 物体绕自身旋转,在开发过程中,不可能在不更新资源的情况下创建bundle,因此您可以在编辑器环境中使用AssetDatabase。 为了模拟,这通常需要我们封装一个动态资源加载器模块,并在不同的环境下实现不同的实现。 动态资源的存储有时我需要在磁盘上存储一些自己的文件。 例如,我想在初始安装中放置几个捆绑包。 Unity有一个流资产的概念,用于提供对存储接口的访问。 我们需要在编辑器中创建一个名为StreamingAssets的文件夹,并将我们需要放到客户磁盘上的动态文件放在这个文件夹下。 安装后,这些文件将被放置在用户磁盘上的指定位置。 这个位置可以通过Application.streamingAssetsPath来获取。
4.什么是协程?
主线程运行的同时,又启动另一段逻辑处理来辅助当前程序的执行。 换句话说,启动一个协程就是启动一个线程。 可用于控制运动、序列和对象行为。
5.你用过哪些插件?
界面制作推荐:NGUI
两款2D游戏制作推荐:2D Toolkit/工具包、工具箱
三个可视化编程建议:PlayMaker
推荐四个插值插件:iTween、HOTween
五种路径搜索建议:简单路径
六大美术动画制作推荐:RageSpline、Smooth Moves
七大屏幕增强推荐:Bitmap2Material、Strumpy Shader Editor
八项摄像机管理建议:安全摄像机
九个资源包推荐:自然包
10.道路建设插件EasyRoads3D
6、使用Unity3d实现2D游戏有几种方式?
1. 使用自己的GUI;
2.将相机的Projection值调整为Orthographic(正交投影),与z轴无关;
3.使用2d插件,如:2DToolKit;
7.Unity3d中的碰撞器和触发器有什么区别?
触发器只是碰撞体上的一个属性,碰撞体是触发器的载体。
碰撞体有碰撞效果,IsTrigger=false,可以调用OnCollisionEnter/Stay/Exit函数;
触发器无碰撞效果,IsTrigger=true,可以调用OnTriggerEnter/Stay/Exit函数。
A。 如果不希望碰撞检测影响物体的移动但仍想检测碰撞,请使用触发器(Trigger)。
b. 触发器用于检测物体是否经过空间中的某个区域
8、物体发生碰撞的必要条件
两个对象都必须有一个碰撞器,并且其中一个对象还必须有一个刚体 (Rigidbody)。
8.1CharacterController和Rigidbody有什么区别?
CharacterController自带胶囊碰撞器,包含刚体属性;
Rigidbody是刚体,它使物体具有刚体的特性。
【CharacterController:角色控制器】Rigidbody具有完全真实的物理特性,而CharacterController可以说是受限的Rigidbody材质材料,具有一定的物理效果但并不完全真实。
9. 在物体碰撞的整个过程中,有几个阶段。 列出对应的三个阶段的功能。
1.OnCollisionEnter(进入碰撞)
2.OnCollisionStay(保持碰撞)
3.OnCollisionExit(退出碰撞时)
10、Unity3d的物理引擎中,施加力的方式有多种,分别介绍。
rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函数中。
11.什么是链条接头?
铰链关节可以模拟两个物体用链条连接在一起的情况。 它可以使两个物体在固定距离内相互移动,而不产生任何力,但当达到固定距离时,就会产生拉力。
12. 使用什么函数来旋转物体本身?
变换.旋转()
13. 使用什么函数可以使物体围绕某一点旋转?
Transform.RotateAround()
14.Unity3d提供了一个类(PlayerPrefs)用于保存和读取数据。 请列出保存和读取塑料数据的功能。
PlayerPrefs.SetInt()
PlayerPrefs.GetInt()
15.Unity3d提供了几种类型的光源。 他们是哪些?
四种。
定向光: 定向光
点光源:Point Light
聚光灯:聚光灯
区域光:区域光
16、Unity3d脚本从觉醒到销毁有比较完整的生命周期。 请列出系统自带的几个重要方法。
唤醒—>开始—>更新—>FixedUpdate—>LateUpdate—>OnGUI—>重置—>OnDisable—>OnDestroy
17. 物理更新一般放在哪些系统功能中?
每绘制一个固定帧就会执行一次FixedUpdate。 与Update不同的是,FixedUpdate是在渲染帧执行的。 如果你的渲染效率较低,FixedUpdate 调用次数也会相应减少。 FixUpdate更适合物理引擎计算,因为它与每一帧的渲染相关。 更新更适合控制。
18、移动相机的动作放在哪个系统函数中? 为什么要放在这个函数里呢?
LateUpdate 在每一帧执行后被调用。 它在所有Update完成后调用,更适合命令脚本的执行。 官网上的例子是摄像头跟随。 只有在所有 Update 操作完成后才会跟踪摄像机。 否则,摄像机可能已经前进,但视角中没有角色的空框。
19、当游戏中需要频繁创建某个对象时,我们需要怎样做才能节省内存?
使用预制对象对象,然后复制它来创建它。
20. 如果场景中放置了多个摄像机并且同时处于活动状态,会发生什么情况?
游戏界面可以看到很多摄像头的混合体。
21.请描述Prefab的作用以及如何在移动设备的环境中正确使用它?
Prefab在实例化时使用,主要针对经常使用的对象,其属性易于修改。
22、请简单描述一下如何在Unity3d中不同项目之间安全迁移资源数据。 请列出三种方法?
1.可以将assets目录和Library目录一起迁移
2. 出口包装
3.使用Unity提供的assets Server功能
23.请描述一下游戏动画的类型及其原理?
主要包括关节动画、骨骼动画、单网格模型动画(关键帧动画)。
A。 联合动画:将角色分为几个独立的部分,一个部分对应一个网格模型,各部分的动画连接成一个整体动画。 人物性格更加灵活。 Quake2中使用了这种动画;
b. 骨骼动画是一种广泛使用的动画方法,它综合了上述两种方法的优点。 骨骼根据人物的特征形成一定的层次结构。 它们通过关节连接,可以进行相对运动。 皮肤在骨骼外被覆盖为单个网格。 确定角色的外貌;
C。 单个网格模型动画由完整的网格模型组成。 将每个顶点的原始位置及其变化量记录在动画序列的关键帧中,然后进行插值操作以达到动画效果,使角色动画更加逼真。
24.请描述Unity3d中组件出现数据丢失的原因
通常绑定到组件的对象会被删除。
25.Alpha混合工作原理
Alpha Blend实现了透明效果,但只能对某个区域进行alpha操作,并且透明度可以设置。
26.编写光照计算中diffuse的计算公式
计算公式为:Idiffuse = Dintensity*Dcolor*NL; (Dintensity代表漫反射强度,
Dcolor代表漫射光颜色,
N 是点的法向量,
L 是光源矢量,其中 N 是点乘以 L。如果结果小于或等于 0,则漫反射为 0。
27.什么是Lod,它的优点和缺点是什么?
LOD(细节级别)是最常用的游戏优化技术。 它根据模型的位置和重要性来决定对象渲染的资源分配,减少不重要对象的面数和细节,从而实现高效的渲染操作。
28、影子判断的两种方法及工作原理。
A.阴影由本影和半影两部分组成
A。 本影:场景表面上不直接被光源照亮的区域(全黑且轮廓分明的区域)
b. 半影:场景表面上被某些特定光源直接照亮但并非全部特定光源照亮的区域(半明半暗区域)
寻找阴影区域的方法:进行两次消隐处理
一次消隐每个光源,找出该光源不可见的区域L;
一旦视点位置被隐藏,则找到视点可见的表面S;
阴影面积=L∩S
B.阴影分为自阴影和投射阴影两种
自阴影:由于物体本身的遮挡,光线无法到达其上方的某些可见表面
工作原理:采用背面剔除的方法得到,即假设视点在点光源的位置。
投射阴影:由不透明物体阻挡光线而形成的阴影,使得场景中的物体或物体后面的区域不会被光线照亮。
工作原理:将光源发出的光投射到物体的所有可见表面上,将这些表面投影到场景中得到投影面,然后将这些投影面与场景中的其他平面相交得到阴影多边形,并保存这些阴影多边形信息。 然后根据视点位置对场景进行相应的处理,得到需要的视图(用空间换时间,每次只需要根据视点位置计算一次阴影,省去了消隐过程)如果是动态光源,此方法无效。
29.什么是顶点着色器以及如何计算它?
顶点着色器
顶点着色器是在GPU上执行的程序,用于替代固定管线中的变换和光照。 顶点着色器主要操作顶点。
Vertex Shader 完成输入顶点从局部空间到齐次空间(齐次空间)的变换过程。 齐次空间是投影空间的下一个空间。 这期间有几个过程:世界变换、视图变换、投影变换和光照。
30.什么是MipMap,它有什么作用?
MipMapping:三维计算机图形纹理渲染中常用的技术。 为了加速渲染过程并减少图像锯齿,纹理被处理成由一系列预先计算和优化的图片组成的文件。 这样的纹理称为 MipMap。 。
31、计算机测试:二选一
1.使用代码实现第三个字符控制器
2、实现起重机吊运物体的功能
【起重机需要节点附着和坐标系转换来吊运物体】
32.反转旋转动画的方法是什么?
【反转动画,将动画速度调整为-1。 碰撞时,被碰撞物体与被碰撞物体有碰撞组件,碰撞物体有刚体组件,或者角色碰撞必须包含角色组件或者改变animation.speed]
33.物体的碰撞检测需要什么属性?
检测碰撞有两种方法,一种是使用碰撞器,另一种是使用触发器。
【Physics.OverlapSphere相交球体检测碰撞,碰撞检测需要边界框】
34. 获取、添加、删除组件的命令有哪些?
获取:获取组件
添加:添加组件
删除:销毁
35.Animation.CrossFade命令的作用是:(C)
A. 动画放大 B. 动画转换 C. 动画淡入其他动画
36.Application.loadLevel命令是:(A)
A. 加载级别 B. 异步加载级别 C. 加载动作
37.调试记录到控制台的命令是什么?
调试.Log();
39.编辑器类的存放路径是什么?
在项目目录下的Assets/Editor文件夹中。
40.使用本机GUI创建可拖动窗口的命令是什么?
GUI.DragWindow();
41.localPosition和Position有什么区别?
localPosition:自己的位置,相对于父级的变换位置。 ,Position:世界坐标变换的位置
42、编写一个定时器工具,从整点开始计时,格式为:00:00:00
43.编写Animation的五个方法
添加剪辑 添加剪辑,
混合混合,
玩,
停止停止3D角色,
样本
44. 如何获取对象上的脚本方法
GameObject.GetComponent();
45.请简述向量点积、向量叉积和向量归一化的几何意义?
点积的几何意义是:计算两个向量之间的夹角和在某个方向上的投影;
叉积的几何意义是创建一个垂直于平面、三角形或多边形的向量;
46.Unity3D支持多线程吗? 如果支持的话需要注意什么?
支持:如果要同时处理很多事情或者与Unity对象交互很少,可以使用线程,否则使用协程。
注意:C#中有一个lock关键字,用于保证在特定时间内只有一个线程可以访问特定对象。
47.Unity3D中协程和C#线程有什么区别?
Unity3d没有多线程的概念,但是unity也为我们提供了StartCoroutine(协程)和LoadLevelAsync(关卡异步加载)方法,用于后台加载场景。 StartCoroutine 为什么叫协程? 所谓协作,就是当你在StartCoroutine的函数体中处理一段代码时,使用yield语句来等待执行结果。 在此期间,不影响主程序的继续执行,可以协同工作。LoadLevelAsync允许您在后台加载新的资源和场景,因此通过使用协同,您可以在前台使用加载条或动画来提醒玩家游戏不卡顿,同时后台协作异步处理加载[e??s??kr ?n?s].同步同步
48.请简述四元数的作用以及四元数相对于欧拉角的优点
A. 四元数一般定义如下: q=w+xi+yj+zk 其中 w、x、y、z 为实数。 同时有:i*i=-1 j*j=-1 k*k=-1
B、四元数也可以表示为:q=[w,v]
旋转的表示方法有很多种,比如轴/角、欧拉角、矩阵、四元数等。与其他方法相比,四元数有其自身的优点:
A。 四元数不存在欧拉角引起的万向节锁问题[万向节死锁]
b. 四元数由4个数字组成,旋转矩阵需要9个数字。
C。 在两个四元数之间插值更容易
d. 四元数和矩阵在多次运算后会累积误差,需要分别进行归一化和正交化。 标准化四元数 e 更容易。 与旋转矩阵类似,两个四元数元组相乘代表两次旋转
49、请简单描述一下OnBecameVisible和OnBecameInvisible的执行时机,以及它们执行的意义?
当渲染器在任何相机上都不可见时调用:OnBecameInvisible
当渲染器在任何相机上可见时调用:OnBecameVisible
50.动画层的作用是什么?
动画层是一个具有分层动画编辑概念的工具,可以用来创建和处理任何类型的动画。
51. 请说出4个面向对象的设计原则并简要描述它们的含义。
1)单一职责原则(SRP):一个类最好只做一件事,并且只有一件事可以导致它发生改变。
2)开闭原则(简称OCP):对扩展开放,对变更封闭
3)里氏替换原则(简称LSP):子类必须能够替换其基类
4)依赖倒置原则(DIP):依赖于抽象
5)接口隔离原则(简称ISP):使用多个小型专用接口,而不是一个大型通用接口。
52.材质和物理材质有什么区别?
PhysicMaterial:物理材质描述,如何处理物体碰撞(摩擦、弹性)。
Material(材质类) 为了获取对象使用的材质,可以使用 Renderer.materia 属性:
53.法线贴图、CG动画
A、法线贴图:在原始物体凹凸表面的每个点绘制法线,并通过RGB颜色通道标记法线的方向。 你可以把它理解为与原来凹凸不平的表面平行的另一个不同的表面。 但实际上它只是一个光滑的平面。
B.CG动画:原为Computer Graphics的英文缩写。 随着一系列以计算机为主要工具进行视觉设计与制作的相关产业的形成,国际上习惯将利用计算机技术的视觉设计与制作领域称为CG。 它既包含技术又包含艺术,涵盖了当今计算机时代几乎所有的视觉艺术创作活动,如平面印刷设计、网页设计、三维动画、影视特效、多媒体技术、基于计算机辅助的建筑设计等。设计、工业造型设计等 NGUI(NUGUI1、NGUI2)
54. 如何销毁UnityEngine.Object及其子类?
使用 Destroy() 方法;
55.请描述游戏动画的类型及其原理。
主要包括关节动画、单网格模型动画(关键帧动画)、骨骼动画。
A。 联合动画将角色分为几个独立的部分。 一个零件对应一个网格模型,各个零件的动画连接成一个完整的动画。 人物性格更加灵活。 这用于 Quake2 ([kwe?k]vi.tremble, tremble;) 类型的动画;
b. 单个网络模型动画由一个完整的网格模型组成。 将每个顶点的原始位置和变化量记录在动画序列的关键帧中,然后进行插值操作以达到动画效果,角色动画更加逼真。
C。 骨骼动画是一种广泛使用的动画方法,它综合了上述两种方法的优点。 骨骼根据人物的特征形成一定的层次结构。 它们通过关节连接,可以进行相对运动。 皮肤在骨骼外被覆盖为单个网格。 决定角色的外观。皮肤网格的每个顶点都受到骨骼的影响,从而实现完美的动画
56.以下哪种方法可以打开Unity的Asset Store?
Windows -> 资源商店
57. Mecanim系统中,Body Mask的作用是什么?
指定身体的某个部位是否参与渲染
58. 以下哪个步骤可以打开Unity编辑器的Lightmapping视图?
Windows --> 光照贴图
59.关于光照贴图
A:使用光照贴图比使用实时光源渲染更快
B:可以减少游戏内存消耗
C. 多个物体可以使用相同的光照贴图
60.关于Vector3的API,下列哪种说法是正确的?
Vector3.forward与Vector3(0,0,1)含义相同;
61.什么是导航网格(NavMesh)?
用于自动寻路的网格
62. 什么是本地坐标,什么是世界坐标?
世界坐标不会改变,始终以世界坐标轴的XYZ为标准。 局部坐标实际上是它自己的坐标,它会随着物体的旋转而变化。
63、itween插件的作用是什么? itween作用于世界坐标还是局部坐标? 请列出3种常用方法?
iTween 是一个动画库。 作者创建它的目的就是以最小的投入获得最大的产出。 它使您的开发更加轻松。 你可以用它轻松实现各种动画,摇动、旋转、移动、淡入淡出、着色、控制音频等。”
方法:
A。 MoveTo 对象移动;
b. ColorTo:随时间改变对象的颜色组;
C。 LookTo:随时间旋转对象,使其面朝向提供的 Vector3 或 Transform 位置
64、请简单描述一下NGUI中Panel和Anchor的功能
Anchor 包含 UIAnchor 脚本。 UIAnchor的功能是将对象锚定到屏幕边缘(左上、左中、左下、上、中、下、右上、右中、右下),或者缩放对象以匹配屏幕的大小屏幕。 面板对象具有 UIPanel 脚本。 UIPanel 是一个包含所有 UI 小部件的容器,负责优化和托管所包含的小部件以减少绘图命令调用。
65、Unity相机有几种工作方式? 这些是什么?
透视相机和正交相机
66. LayerMask.NameToLayer()方法有什么作用?
LayerMask 的使用是按位运算。 LayerMask.NameToLayer("Players") 返回图层的编号。
67.请描述一下MeshRender中材质和着色器的区别?
Shader实际上是一个小程序,负责将输入的Mesh与输入的纹理或颜色以指定的方式组合起来,然后输出。 绘图单元可以根据该输出将图像绘制到屏幕上。 输入的纹理或者颜色等,加上对应的Shader,以及Shader的具体参数设置一起打包存储,结果就是一个Material。
着色器一般可以分为两类:
表面着色器,
片段着色器
68.什么是矢量图像?
矢量图形:计算机上显示的图形一般可分为两类——矢量图形和位图。 矢量图形使用直线和曲线来描述图形。 这些图形的元素有点、线、矩形、多边形、圆、弧等,都是通过数学公式计算出来的。 例如,花朵的矢量图形实际上是由线段形成的轮廓,花朵的颜色由外框的颜色和外框包围的颜色决定。 由于矢量图形可以通过公式计算,因此矢量图形的文件大小一般较小。 矢量图形最大的优点是无论放大、缩小、旋转都不会失真; 最大的缺点是颜色难以表达。
69.电脑题:使用鼠标拖动场景中的物体,使用鼠标滚轮进行缩放(使用Cube即可)。
70. 游戏进入新场景后会立即调用以下哪个函数?
MonoBehaviour.OnLevelWasLoaded
71、Unity3D方法的执行顺序:
1. Awake( ), 2. Start( )(激活期间的初始化代码)
3. Update()【FixUpdate、LateUpdate】,
4.OnGUI(渲染模块)
5.然后是卸载模块(TearDown)。 主要有两个方法:OnDisable() 和 OnDestroy()。
72. 数学函数
Mathf.Round; 四舍五入; Mathf.Clamp 极限; Mathf.Lerp插值;