2D游戏简介

2D游戏是指二维交互式动画,也就是我们通常所说的‘2D动画’。
只不过在游戏方面,这种动画可以根据用户的需求而进行互动


2D游戏基本特征

二维交互式动画的基本特征如下(主要是针对3d游戏):

⒈贴图

传统的2d游戏中的美术资源(人物行走、人物状态、地图等等)都是以png或jpg的图形文件渲染而成,而3d游戏中的美术资源多数是以模型为主.

⒉视角

2d游戏是没办法完成视角转换的.因为2d游戏的美术资源是平面图.即某种美术资源的前、后、左、右不能够同时出现在游戏里.但3d游戏却可以完成视角转换.

⒊渲染

2d游戏的所有美术资源可以不经过引擎的渲染就能使用,但3d游戏的任何美术资源都必须经过引擎的渲染才能使用.


早期Unity制作2D游戏的方法

以前版本的Unity做2D游戏,虽然能做,但是很麻烦。

比如你可以将一张纹理赋予一个”面片”网格,然后用脚本控制它的动画调整它的位移.如果你要使用物理引擎,那么还要将这个Obeject处理3D的,所以你还要确保你的Object要有足够的深度以确保他们在其它轴向上不起冲突.或者你选用一个第三方插件,如2D Toolkit或者Orthello 2D Framework,他们有着强大的功能,但同样需要你去做一些约束工作。


Unity4.3原生的2D开发环境

Unity4.3增加了原生的2D开发环境。

2d游戏架构 2d游戏特点_2D碰撞器


如果你想更改这个设置,可以选择”Edit\Project Settings\Editor”打开编辑器设置,在”Default Behavior Mode”中改模式为2D,如下图:

2d游戏架构 2d游戏特点_DrawCall_02


“Default Behavior Mode”(默认行为模式)定义你项目在导入Assets时的默认导入设置,当设置为3D模式时,Unity假设你将导入的文件创建为纹理类型(如:PNG文件);当设置为2D时,Unity假定你想要的导入的资源为Sprite类型


创建序列帧动画

篇幅较长请查看以下的链接
创建序列帧动画


场景视图的2D模式

场景视图里有个控制二维切换的按钮,点击2D按钮可以激活2D模式,像下面这样:

2d游戏架构 2d游戏特点_2D碰撞器_03


这个按钮会将场景相机在透视视图和正交投影视图之间进行切换。

当观察透视视图时,远离相机的物体看起来更小,就像在现实世界中眼睛看物体一样,然而当正交投影视图的时候,物体的大小并不受与相机的距离影响。因此,在二维模式时,一个对象不管位置离相机远近,只要尺寸不变,它看起来将没有变化的。下面的图可以清晰的看到2D和3D模式视窗的区别

2d游戏架构 2d游戏特点_2D碰撞器_04


你只能做视图的平移操作,Y轴指向上,X轴指向右。

这个设置是不会影响到游戏播放时效果的,因为它只是帮助你组织场景里的对象,甚至后期你会在创建2D游戏的同时创造3D游戏,你可能需要在这两种模式间根据需要切换


制造精灵

切片精灵表
Sprite图层


什么是drawcall

Unity每次在准备数据并通知GPU渲染的过程称为一次Draw Call。

一般情况下,渲染一次拥有一个网格并携带一种材质的物体便会使用一次Draw Call。

对于渲染场景中的这些物体,在每一次Draw Call中除了在通知GPU的渲染上比较耗时之外,切换材质与shader也是非常耗时的操作。

Draw Call的次数是决定性能比较重要的指标。


drawcall和setpass call

不少开发者误以draw call为unity效率的直接衡量指标;
unity官方注意到了这点,draw call这个说法比较有误导性;实际上draw call本身的call过程消耗比较低,消耗高的是draw call对象集合的改变过程和集合中各个对象的处理过程,比如dynamic batch和static batch相同draw call下性能差别很大。
所以unity的统计界面有了setpass call,其意思大致是场景需要切换处理的pass数,因为渲染的对象是通过材质介以材质所含的shader中的各个pass最终得以显示的,这个指标对衡量性能来说比“draw call”相对准确一点。


2D物理

  • 2D刚体
  • 2d游戏架构 2d游戏特点_2D物理引擎_05

  • mass:0代表着无限大,也就是“静态刚体”。范围:0.001到10000。
    Linear Drag:线性阻尼,也就是物体在运动过程中收到的阻力。
    Angular Drag:角度阻尼系数,刚体在旋转过程中受到的阻力。
    GravityScale:重力缩放,控制着重力的大小,其数值范围为-100000到100000.
    Fixed angle:固定角度,指刚体在运动过程中保持固定的角度,这就相当于关闭了刚体的旋转功能。
    IsKinematic:控制刚体是否变为运动学物体,就是我们的刚体不在受物理引擎的控制,而受transform或者是动画等等的控制。
    SleepingMode:睡眠,Unity会临时把处于静止状态的物理模拟去除,这样主要是节省计算资源。

1、Never Sleep:永远不睡眠。
2、Start Awake:Awake时就进入睡眠。
3、Start Asleep:立即进入睡眠。

Collision Detection:碰撞发现。

1、Discrete Detection:正常状态下的检测。

2、Continuous:连续性性检测。

- 2D碰撞器

2d游戏架构 2d游戏特点_2D刚体_06


unity2D的碰撞体和3D的差不多。在unity2D中,有Box Collider2D(盒子碰撞器),Circle Collider2D(圆形碰撞器),Edge Collider2D(边缘碰撞器)和Polygon Collider2D(多边形碰撞器)。Edge Collider2D和Polygon Collider2D是3D项目里面没有的。 Polygon Collider2D:。对于多边形碰撞器有一个比较特殊的功能,也就是可以编辑多变形碰撞器的外形。我们可以在多边形上拖动可以出现一个顶点,拖动次顶点,可以改变碰撞器的外形。按住Ctrl键的同时,单击顶点,可以把顶点删除。

2d游戏架构 2d游戏特点_2D碰撞器_07


刚体属性的介绍:

Material:定义刚体表面的一些物理特性,例如摩擦力,柔软程度等,由此决定了它对其他物体的反弹能力等。

Is Trigger:属于3D碰撞的都应该知道这个属性的作用。勾了就会产生的是刚体碰撞。不勾就是触发碰撞,此时碰撞的两个物体之间可以不使用刚体去进行驱动。

void OnCollisionEnter2D(Collision2D coll) 
{
    Debug.Log(coll.gameObject.name);
}

void OnTriggerEnter2D(Collider2D other)
{
    Debug.Log(other.name);
}
  • 2D物理材质

SpritePacker


图集的优点