Unity应试技能——Unity篇

什么是协同程序?
协程称为协同程序,即在主线程运行的同时开启另一段逻辑,来协助当前程序的执行。
StartCoroutine()是开启协程,StopCoroutine()是关闭协程,协程的返回值是IEnumerator类型,而在协程内部必须有yield return ***,
IEnumerator用来记录执行到yield return的位置,每次执行协程时都是从当前位置向后执行,而不是从协程的最开始位置执行,除非只有一个yield return
在一个主程序中可以开启多个协程。
yield return null 和 yield return +数字的区别?
yield return null; //暂停协同程序,下一帧再继续往下执行
yield return +数字  // 也表示暂停协同程序,在数字帧后再继续执行
这里当数字==0时 和 return null 效果相同, 下一帧继续执行
Unity3D的协程和C#线程之间的区别是什么?
多线程程序同时运行多个线程,而在任一指定时刻只有一个协程在运行,并且这个正在运行的协同程序只在必要时才被挂起。
除主线程之外的线程无法访问Unity3D的对象、组件、方法。
Unity3D没有多线程的概念,不过Unity也给我们提供了StartCoroutine(协同程序)和LoadLevelAsync(异步加载关卡)后台加载场景的方法。
StartCoroutine为什么叫协同程序,所谓协同,就是当在StartCoroutine的函数体里处理一段代码时,利用yield语句等待执行结果,这期间不影响主程序的继续执行,可以协同工作。
Unity3d提供了一个用于保存和读取数据的类(PlayerPrefs),其用来操作的数据类型有哪三种,请列出保存和读取整形数据的函数?
PlayerPrefs提供用来操作的数据类型是:intfloatstring;
保存和读取整形数据的函数:PlayerPrefs.SetInt()PlayerPrefs.GetInt();
Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法?
比较完整的脚本的生命周期: 【Awake()】=>【OnEnable()】=>【Start()】=>【FixedUpdate()】=>【Update()】=>【LateUpdate】=>【OnGUI()】=>【OnDisable()】=>【OnDestroy()】
物理更新一般放在哪个系统函数里?
物理更新使用FixedUpdate(),每固定帧绘制时执行一次,和Update()不同的是FixedUpdate()是渲染帧执行,
如果设备的渲染效率低下的时候,FixedUpdate()调用次数就会跟着下降。
FixedUpdate()比较适用于物理引擎的计算,因为是跟每帧渲染有关。
Update()就比较适合做控制。
LOD是什么,优缺点是什么?
LOD(Level of detail):多层次细节,是最常用的游戏优化技术。
LOD按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。(LOD的缺点:增加了内存。)
MipMap是什么,作用?
MipMapping:在三维计算机图形的贴图渲染中常用的技术;
MipMap为加快渲染进度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为Mipmap。
MipMap技术有点类似于LOD技术,但是不同的是,LOD针对的是模型资源,而MipMap针对的纹理贴图资源。
使用MipMap后,贴图会根据摄像机距离的远近,选择使用不同精度的贴图。
MipMap的缺点:会占用内存,因为MipMap会根据摄像机远近不同而生成对应的八个贴图,所以必然占内存。
MipMap的优点:会优化显存带宽,用来减少渲染,因为可以根据实际情况,会选择适合的贴图来渲染,距离摄像机越远,显示的贴图像素越低,越近像素越高。
如何优化内存?
1、压缩自带类库;
2、将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;
3、释放AssetBundle占用的资源;
4、降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;
5、使用光照贴图(LightMap),使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)等;
6、代码中少产生临时变量。
foreach是只读的。不能一边遍历一边修改。
Unity3D Shader分哪几种,有什么区别?
Unity3D Shader分3种:固定功能管线着色器表面着色器顶点片段着色器
表面着色器:抽象层次比较高,它可以轻松地以简洁方式实现复杂着色。(表面着色器可同时在前向渲染和延迟渲染模式下正常工作)
顶点片段着色器:可以非常灵活地实现需要的效果,但是需要编写更多的代码,并且很难与Unity的渲染管线完美集成;
固定功能管线着色器:可以作为前两种着色器的备用选择,当硬件无法运行哪些酷炫Shader时,可以通过固定功能管线着色器来绘制出一些基本的效果。
CharacterController和Rigidbody的区别?
Rigidbody具有完全真实物理的特性,而CharacterController可以说是受限的Rigidbody,具有一定的物理效果但不是完全真实的。
移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中?
摄像机移动放在LateUpdate()。
在所有Update()操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还没有角色的空帧出现。
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里面配以相应的检查工具;
动态加载资源的方式?
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模块,在不同的环境下做不同实现。
StreamingAssets和Resources的功能异同?
相同点:都是Unity3d保留的目录;
不同点:
--1、Resources里的内容在打包的时候会加密和压缩;而StreamingAssets里的资源会直接打包,不做处理;
--2、Resources里的内容需要用Resources.Load()来加载;而StreamingAssets则需要用www来加载;(Assetbundle文件通常也是放在这个StreamingAssets文件夹来进行加载;)
什么是DrawCall?  DrawCall高了有什么影响?如何降低DrawCall?
Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call。
DrawCall越高对显卡的消耗就越大。
降低DrawCall的方法:
--1、Dynamic Batching动态批处理;
--2、Static Batching静态批处理;
--3、高级特性Shader降级为统一的低级特性的Shader;
什么是动态合批?跟静态合批有什么区别?
如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处理。(动态批处理操作是自动完成的,并不需要我们进行额外的操作。)
动态批处理(Dynamic Batching):一切都是自动的,不需要做任何操作,而且物体是可以移动的,但是限制很多。
静态批处理(Static Batching):自由度很高,限制很少。(缺点:可能会占用更多的内存,而且经过静态批处理后的所有物体都不可以再移动了。)
什么是LightMap?
LightMap称为光照贴图:
LightMap是指在三维软件里实现打好灯光,然后渲染把场景各表面的光照输出到贴图上,最后又通过引擎贴到场景上,这样就使物体有了光照的感觉;
把灯光和物体设置成静态,然后对灯光进行烘培,此时在物体表面形成一张有灯光效果的贴图。(把场景中的灯光删除掉,物体表面依赖有灯光的效果,这种效果是贴图造成的)
LightMap光照贴图的优点:避免动态光照在场景中的实时渲染,减少DrawCall。
Unity3D中的Collider碰撞器和Trigger触发器的区别?
Collider碰撞器是Trigger触发器的载体,而Trigger触发器只是Collider碰撞器身上的一个属性。
1、Collider碰撞器物体不能相互进入到对方内部;Trigger触发器可以;
2、Trigger触发器角色控制器可以使用;Collider碰撞器不能使用;
3、Trigger触发器没有物理属性;Collider碰撞器可以有力存在;
4、Collider碰撞器调用:OnCollisionEnter/Stay/Exit函数;Trigger触发器调用OnTriggerEnter/Stay/Exit函数;
当IsTrigger = false时:Collider碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;
当IsTrigger = true时:Collider碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。
说明:如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域时就可以用Trigger触发器。
MeshCollider和其他Collider的一个主要不同点?
MeshCollider是网格碰撞器,对于复杂网状模型上的碰撞检测,比其他的碰撞检测精确的多,但是相对其他的碰撞检测计算也增多了,所以一般使用网格碰撞也不会在面数比较多的模型上添加,而会做出两个模型:一个超简模能表示物体的形状用于做碰撞检测,一个用于显示。
物体发生碰撞的必要条件?
物体发生碰撞的必要条件:
条件1:两个物体都必须带有碰撞器(Collider),
条件2:其中一个物体还必须带有Rigidbody刚体,
条件3:运动的物体带有Rigidbody脚本才能检测到碰撞。
当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况? 如何避免?
会发生穿透(碰撞检测失败了)
避免穿透的方法:把刚体的实时碰撞检测打开“Collision Detection”修改为“Continuous Dynamic”;
在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()被调用。
请描述游戏动画有哪几种,以及其原理?
主要有关节动画、单一网格模型动画(关键帧动画)、骨骼动画;
1、关节动画:把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整体的动画,角色比较灵活,Quake2中使用这种动画;
2、单一网格模型动画:由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其该变量,然后插值运算实现动画效果,角色动画较真实;
3、骨骼动画:广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,由关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观,皮肤网格的每一个顶点都会受到骨骼的影响,从而实现完美的动画。
Unity3D是否支持写成多线程程序? 如果支持的话需要注意什么?
Unity支持多线程,如果同时要处理很多事情或者与Unity的对象互动小可以用Thread线程,否则使用Coroutine协程。
需要注意:
1:虽然支持多线程,但是仅能从主线程中访问Unity3D的组件、对象和Unity3D系统调用,所以如果使用的话需要把组件中的数值传到开启的新线程中。
2:C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象。
四元数是什么? 主要作用是什么? 对欧拉角的优点是什么?
四元数一般定义:q = w = xi + yj + zk;其中w,x,y,z是实数。(同时i*i=-1, j*j=-1, k*k=-1)
四元数也可以表示为:q=[w,v];
所谓四元数,就是把4个实数组合起来的东西。(4个元素中,一个是实部,其余3个是虚部)
有多种方式可表示旋转,如axis/angle、欧拉角(Euler angles)、矩阵(matrix)、四元数等;
作用:四元数用于表示旋转。
优点:
--1、能进行增量旋转;
--2、避免万向锁;
--3、给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式)
四元数不会有欧拉角存在的gimbal lock问题(万向节死锁)
四元数由4个数组成,旋转矩阵需要9个数。
两个四元数之间更容易插值;
四元数、矩阵在多次运算后会积累误差,需要分别对其做规范化(normalize)和正交化(orthogonalize),对四元数规范化更容易;
与旋转矩阵类似,两个四元数相乘可表示两次旋转。
Unity摄像机有几种工作方式,分别是什么?
摄像机工作方式有两种:正交和透视;
正交(Orthographic)】:正交无法看到一个物体距离自己有多远,或者远近的变化,物体也不会随着距离而收缩,所以一般做2D游戏或者是UI时会使用正交摄像机。
透视(Perspective)】:透视一般看物体随着距离有大小的变化,一般3D游戏里经常使用这种摄像机。
写出光照计算中的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;
MeshRender中material和shader的区别?
MeshRender是模型渲染的组件,有此组件物体才能显示出来。
Material是材质球,实际就是shader的实例,并进行赋值,贴图、纹理、颜色等。
Shader是着色器,实际上是一段程序,还可以用来实现一些仅靠贴图不容易实现的效果,如玻璃等。
Shader大致分三种:1、表面着色器;2、顶点和片元着色器;3、固定功能着色器;
Alpha Blend工作原理?
Alpha Blend是实现透明效果。
Color = 原颜色 * alpha/255 + 目标色*(255 - alpha)/255;
光照贴图的优势是什么?
1、使用光照贴图比使用实时光源渲染要快;
2、可以降低游戏内存消耗;
3、多个物体可以使用同一张光照贴图;
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等几个过程)
Unity3D提供了几种光源,分别是什么?
Unity3D提供了4种光源:
平行光:Directional light;
点光源:Point Light;
聚光灯:Spot Light;
区域光:Area Light;
localPosition与Position的使用区别?
localPosition:自身位置,相对于父级的变换的位置,局部坐标其实就是自身的坐标,会随着物体的旋转而变化的;
Position:在世界坐标Transform的位置,世界坐标是不会变的,一直以世界坐标轴的XYZ为标准。
物体自身旋转使用的函数?
物体自身旋转: Transform.Rotate();
物体围绕某点旋转使用的函数?
物体围绕某点旋转: Transform.RotateAround();
两种阴影判断的方法、工作原理?
两种阴影:自身阴影、投射阴影
自身阴影】:因物体自身的遮挡而使光线照射不到它上面的某些可见面;
--工作原理:利用背面剔除的方法求出,即假设视点在点光源的位置;
投射阴影】:因不透明物体遮挡光线使得场景中位于物体后面的物体或区域收不到光照照射而形成的阴影;
--工作原理:从光源处向物体的所有可见面投射光线,将这些面投射到场景中得到投射面,再将这些投射面与场景中的其他平面求交得出阴影多边形,保存这些阴影多边形信息,然后再按视点位置对场景进行相应处理得到所要求的视图;(利用空间换时间,每次只需依据视点位置进行一次阴影计算即可,省去了一次消隐过程)(若是动态光源此方法就无效了)
什么是渲染管道?
渲染管道是指在显示器上为了显示出图像而经过的一系列必要操作;
渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去;
主要步骤:本地坐标=>视图坐标=>背面裁剪=>光照=>裁剪=>投影=>视图变换=>光栅化
主要有三阶段:应用程序阶段,几何阶段,光栅阶段;


 
什么是矢量图?
计算机中显示的图形一般可以分两大类:矢量图和位图。
【矢量图】:使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。
--例如:一幅花的矢量图形实际上是由线段形成外框轮廓,由外框的颜色以及外框所封闭的颜色决定花显示出的颜色。
--由于矢量图形可通过公式计算获得,所以矢量图形文件体积一般较小。
--矢量图形最大的优点是:无论放大、缩小或者旋转等都不会失真;
--矢量图形最大的缺点是:难以表现色彩层次丰富的逼真图像效果。
什么是矩阵? 矩阵运算?
【矩阵】:横轴排列的二维数据表格;
【矩阵运算】:
--矩阵加减:限制条件:行和列必须相同,对应相加相减得到结果;
--矩阵乘法:限制条件:要求左矩阵的行和右矩阵的列必须同,行数和左矩阵相等,列数和右矩阵相等,结果的第i行第j列,是左矩阵的第i行和右矩阵的第j列逐个相乘并把结果相加,得到结果是结果的 第i行第j列;
角度和弧度的转换?
1弧度 = 180度 / pi (约57.3)
1度 = pi / 180弧度 (约0.017)
矢量标量?
【矢量】:有方向,如力,速度;
【标量】:没有方向,如温度;
【单位向量】:有方向,大小为1的向量;
【矢量的加法】:是矢量的几何和,服从平行四边形规则;
【矢量满足交换律,满足结合律】;
在直接坐标系中,矢量等于其在坐标轴上投影的矢量之和(二维矢量可以看做三维矢量的特例,也就是说:三维成立,二维也成立)
【矢量减法】:大小相等,方向相反,称为逆矢量;
任意多个矢量首尾相连接组成闭合多边形,其结果必为0;
【矢量的乘法】:点积(內积、标量积)、叉积(外积)结果是矢量;
【点积方法】:dot;
GameObject.Find和transform.Find的区别?
【GameObject.Find】:GameObject通过名字或者路径来查找游戏对象:
--1、无法查找隐藏对象。(在查找路径上任意一个父物体隐藏都查不到)
--2、如果查找不在最上层,就需要根据路径查找,但路径查找是把双刃剑:
    ----2.A、优点1:解决查找中可能出现的重名问题;
    ----2.B、优点2:如果有完全的路径,减少查找范围,减少查找时间;
    ----2.C、缺点1:结构和路径调整后,容易影响到物体的查找,需要重新定位查找路径;
--3、使用方便但效率低下。
    ----GameObject.Find:相当于递归遍历查找,虽然操作方便,但效率低下,建议在start中查找对象并保存引用,切忌在Update中动态查找。
【transform.Find】:
--1、可以查找隐藏对象;
--2、支持路径查找;
--3、查找隐藏对象的前提是transform所在的根节点必须可见,即active=true;
其他查找:
--GameObject.FindWithTag();
--GameObject.FindGameObjectsWithTag();
隐藏根节点也可查找:使用Resources.FindObjectsOfTypeAll();
游戏对象消失三种方法的区别?(enabled/Destroy/active)
对象消失三种方式:.enabled=false; Destroy(); .active=false;
【1、gameObject.renderer.enabled = false;】:是控制一个物体是否在屏幕上渲染或显示,而物体实际还是存在的,只是相当于隐身,而物体本身的碰撞体还依然存在;
【2、GameObject.Destroy();】:表示移除物体或物体上的组件,代表销毁该物体的内存并没有立即释放,而是在下一个场景中才释放内存资源。(A场景中Destroy的,一般在C场景中才真正释放该物体的内存资源)
【3、gameObject.active = false;】:是否在场景中停用该物体。(在gameObject.active=false;中,在场景中用GameObject.Find()找不到该物体)
物理引擎的核心内容?
物理引擎就是在游戏中模拟真实的物理效果。
Unity内置了NVIDIA的Physx物理引擎,Physx是目前使用最为广泛的物理引擎,被很多游戏大作所采用,开发者可以通过物理引擎高效、逼真地模拟刚体碰撞、车辆驾驶、布料、重力等物理效果,使游戏画面更加真实而生动;
物理引擎主要包含三个核心内容:Collider碰撞体、Rigidbody刚体、PhysicMaterial物理材质;
【1、Collider碰撞体】:是最基本的触发物理的条件,例如碰撞检测。(基本上,没有Collider,物理系统基本没有意义(除了重力));
【2、Rigidbody刚体】:是物体的基本物理属性设置,当检测碰撞完之后,就要计算物理效果,而Rigidbody提供计算基本参数;
【3、PhysicMaterial物理材质】:是附加的基本物理参数,是一个物理材质,Unity3D有自带默认的物理材质的系数(在Edit/ProjectSetttings/Physic下设置),它参与碰撞的计算,例如反弹效果,摩擦效果等;
对Rigidbody施加力的常用方式:AddForce(),添加普通力;AddExplosionForce(),添加爆炸力;AddForceAtPosition(),添加位置力;
使用角色控制器如何防止角色经常卡住?
【Skin Width】:设置为radius的10%;
【Step offset】:对于2米高的Character设置为0.1到0.4;
【Min move distance】:设置为0即可。
Unity3d与Android交互的方式是什么?
Unity3d调Android采用:AndroidJavaClass和AndroidJavaObject来实现;
Android调用Unity3d采用:UnityPlayer.UnitySendMessage(“Main Camera”, “message”, edit.getText().toString());
列举减少包体的方法?
1、纹理格式的压缩(重要):
减少包体主要改变了纹理的格式,其实就是纹理的压缩算法;
--1.A:采用RGB Crunched DXT1,RGBA Crunched DXT5的纹理格式,此压缩方式会比RGB Compressed DXT1和RGBA Crunched DXT5小一半还要多;
--1.B、去掉纹理格式的mip选项,MipMap会生成多种小图来避免缩小图片时没必要的GPU采样消耗;但使用MipMap的图片会比不使用的图片多占用约三分之一的外存和内存;
2、模型文件的压缩:
模型文件(玩家模型除外):选择压缩类型为中度;
3、声音文件的压缩:
--3.A、改变声音文件的比特率;
--3.B、改变声音文件的压缩格式;
4、场景的压缩(重要):
--4.A、场景中静态物体对包体大小的影响;
--4.B、减小游戏内静态物体的数量可以减小包体的大小,但是游戏内对静态批处理和Culling等自动化处理都是依据static标记进行的;因此减小包体,会对游戏的帧率有所影响;
Render和Shader的区别?
Shader:提供了非常直观、实时的表面基本着色效果,根据硬件的能力,还能显示出纹理贴图、光源影响甚至阴影效果,但这一切都是粗糙的,特别是在没有硬件支持的情况下,它的显示甚至会是无理无序的;
Render:是基于一套完整的程序计算出来的,硬件对它的影响只是一个速度问题,而不会改变渲染的结果,影响结果的是看它是基于什么程序渲染的,比如是光影追踪还是光能传递;

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GarFe-Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值