Unity合并网格

合并网格就是把多个网格合并为一个整体,从而提升游戏性能。

但是这样一来,我们就不能单独控制这些网格运动了,只能控制合并后的整个网格运动。而且合并的网格使用的材质必须是相同的,合并才可能成功,否则合并之后依然不能提升性能。

可以在Unity资源商店搜Mesh Combine,下载相应的插件来实现合并网格的功能,例如Easy Mesh Combine Tool等插件。

Unity绘制调用(Draw Call)、批次(Batch)

要将游戏中的物体显示到屏幕上,就需要绘制它们。绘制之前,会先由CPU计算出它们的位置、颜色等信息,然后发送绘制指令给GPU。GPU接受到CPU发过来的绘制指令,就会按照要求绘制东西在屏幕上。

Draw Call是指CPU向GPU发送绘制指令的过程,一个Draw Call就是CPU向GPU发送的一组绘制指令,可以绘制出一个或多个物体。

Draw Call有时也被简称为DC

Draw Call太多会使游戏变卡,优化的时候可以想办法降低Draw Call。

要降低Draw Call,可以使用合批技术,例如动态合批和静态合批。将多个Draw Call合批成一个批次(Batch),再由CPU发送给GPU,这样可以提升游戏性能。

Unity静态合批、Batching Static、StaticBatching类

静态合批也叫静态批处理,是Unity的一种优化技术。

对于始终静止不动的物体使用静态合批后,CPU会把它们合并为一个批次发送给GPU处理,这样可以减少Draw Call带来的性能消耗,从而提升游戏性能。

官方文档:https://docs.unity3d.com/cn/current/Manual/static-batching.html

要使用静态合批,必须确保Edit——Project Settings——Player——Other Settings——Static Batching是勾选的。

把一个物体设置为静态的方法: 选中该物体,点击在Inspector窗口右上角的Static右方的下拉菜单,选择Batching Static。

使用静态合批虽然可以提升游戏性能,但是设置为静态的物体在整个游戏中就不能再运动了,强行使它们运动会出问题。

而且即使按照以上步骤进行了静态合批,也不一定保证会成功,必须满足以下全部条件,静态合批才会成功: 1、游戏对象处于激活状态。 2、游戏对象有一个Mesh Filter组件,并且该组件已启用。 3、Mesh Filter组件具有对网格的引用。 4、网格已启用Read/Write功能。 5、网格的顶点计数大于0。 6、该网格尚未与另一个网格组合。 7、游戏对象有一个Mesh Renderer组件,并且该组件已启用。 8、网格渲染器组件不将任何材质与DisableBatching标记设置为true的着色器一起使用。 9、要批处理在一起的网格使用相同的顶点属性。例如,Unity可以将使用顶点位置、顶点法线和一个UV的网格与另一个UV进行批处理,但不能将使用顶点定位、顶点法线、UV0、UV1和顶点切线的网格进行批处理。

即使静态合批成功,合出来的每个批次可以包含的网格顶点数是有限的,最多是64000个顶点。如果超过这个数,则会创建到另一个批次中。

如果要在游戏运行时进行静态合批,则可以使用StaticBatchingUtility类的Combine方法。

StaticBatchingUtility.Combine(GameObject 根物体) 对指定的根物体的所有子孙物体进行静态合批。 只有当它们符合静态合批的所有条件,静态合批才会成功。 成功之后,这些物体就不能再运动了,强行运动会出问题。但是该根物体仍然允许运动。

StaticBatchingUtility.Combine(GameObject[] 要进行静态合批的游戏对象,GameObject 根物体) 对指定的游戏对象进行静态合批,并指定它们静态合批的根物体。 只有当它们符合静态合批的所有条件,静态合批才会成功。 成功之后,这些物体就不能再运动了,强行运动会出问题。但是该根物体仍然允许运动。

Unity设置屏幕分辨率、设置默认屏幕分辨率

设置屏幕分辨率的方法1: Game窗口上方可以找到对应的下拉菜单,点开它,即可以选择屏幕分辨率。 VSync(Game view only)表示垂直同步,勾选后,也只能在播放模式下的Game窗口才可能看出效果。 点击下面的+号可以添加自定义的屏幕分辨率。Label表示自定义的名字。Type选择Fixed Resolution,则该分辨率是固定的,即使缩放游戏窗口,该分辨率也是固定的。Type选择Aspect Ratio,缩放游戏窗口时,该分辨率会随着窗口的缩放而变化,但是仍会维持指定的纵横比。 右击一个屏幕分辨率,可以编辑和删除它。

设置屏幕分辨率的方法2: 通过代码Screen.SetResolution方法可以设置屏幕分辨率

设置游戏启动时的默认屏幕分辨率: Edit——Project Settings——Player——展开Resolution and Presentation下拉菜单——取消勾选Default Is Native Resolution——写上所需的屏幕宽度和屏幕高度