2D游戏中,对精灵的操作需求,往往是两点:
1、 静态精灵:一般做背景展示等
2、 精灵动画:帧动画、骨骼动画等
声明:以下对Unity的操作,基于Unity3D 4.3.4,本人初学Unity,没用过其他版本。
一、 精灵文件的导入
方法1:
如果工程在创建的时候就设定为2D,那么当你将图片文件复制到Assert目录下的时候,图片的纹理类型默认就是Sprite了。如下图:
方法2:
如果工程不是2D的,或者不希望改变项目的设置,可以直接将TextureType手动设置成Sprite,点击Apply确认。效果和方法1完全一样。
二、 原生Unity中的精灵动画
1. 大图分解成小图:
有时候找到的资源,是一个精灵图集的形式,如下:
这是一个loading的图集。将图片拖入assert的相关目录后,修改SpriteMode为Multiple,将精灵设置为多张精灵的集合,而不是Single。然后点击SpriteEditor,打开精灵编辑器。
如下图:
当然,也可以先打开精灵编辑器,主菜单中:Window> SpriteEditor。
Slice就是切片,记得js中对数组的操作中,好像就有这个函数。
Type有两个值可选:Automatic和Grid。Grid就是按照网格来切分,Automatic就比较傻瓜了。一般来说,图集中的小图之间是有空隙的,然后用Automatic,基本不用怎么设置,就能保证不会切坏。如下:
最后,点击Apply确定。然后就会发现,图集下面已经出现了很多的小图:
然后将这些小图片全部选中,直接拖放到Scene里面,就生成了anim动画文件。不能再简单了。不过这样制作出来的动画,都是帧动画。
2. 帧动画:
Unity如果需要制作帧动画,原生编辑器就是支持的。Window->Animation,打开动画编辑器。将需要制作动画的第一帧拖放到Scene中,然后选中这个精灵,如下图:
点击AddCurve,Transform、 SpriteRenderer、Animator这3个其实分别对应Inspector中精灵的3类属性。比如:
当然,我这个是恶搞的。Scale负责缩放的变化,Sprite负责切换精灵图片。然后就变成了一段帧动画。增加关键帧的话,在时间线处右键菜单中有AddKey。选中某帧,在Inspector中修改属性就可以。动画制作太随心所欲了。
三、 2Dtoolkit中的精灵图集和帧动画
1. 图集的制作
在Project中,Create>tk2d>SpriteCollection。图集是制作成prefab的文件形式。设置好文件保存参数后,
然后将需要打包的图片,拖放到编辑器左侧。如下图:
然后就是修改每个精灵的参数了。最需要关注的就是Anchor和ColliderType了。比如这个波浪形的地面,碰撞器类型,我设置为Polygon多边形,然后这个Convex就必须勾选。设置为凸多边形,碰撞检测中会用到。点击编辑器最下方的Collider,就可以自行编辑碰撞区域了。
编辑中的操作,右下角是有提示的:
最后点击右上角的commit完成。
2. 帧动画
仍然是在Project中,Create>tk2d>SpriteAnimation。创建文件后,打开编辑器:
Clip就是帧动画了。
Play用来播放动画或者暂停。WrapMode是动画的播放方式,是循环播放,还是片段循环等。Reverse是将动画反转,就是倒播。Collection和Sprite分别用来设置当前帧的精灵集和具体精灵。如果要删除当前帧,点击Delete即可。Trigger是帧动画的触发事件,因为是刚开始学习,还没开始制作具体的游戏,这个暂时没用到。
最后,点击右上角的commit完成修改。
3. 创建精灵动画
Create->tk2d->Sprite WithAnimator
精灵设置为动画的第一帧,让选择刚才制作的动画集test中的sheep动画。在game中就能看到了。
当然了,也可以先创建tk2d->Sprite,然后添加tk2dSpriteAnimator。
结果和直接创建SpriteWithAnimator是一样的。
四、 在tk2d中切换动画播放
如下:
using UnityEngine; using System.Collections; public class Sheep : MonoBehaviour { private tk2dSpriteAnimator m_Anim; private bool m_bChange = false; // Use this for initialization void Start () { m_Anim = GetComponent<tk2dSpriteAnimator>(); print ("初始化"); } // Update is called once per frame void Update () { if (Input.GetMouseButtonDown (0)) { print("左键点击"); if (m_bChange) { m_Anim.Play("eat"); } else { m_Anim.Play("bian"); } m_bChange = !m_bChange; } } }
绑定到sheep精灵上,然后这个同一个个动画集下有两个动画eat和bian,通过鼠标左键点击,就轮流播放了。