2020-07-20 2D精灵和动画
2020/7/20
作为unity的初学者,今天我学习了2D开发平台的相关内容
一、2D精灵介绍
1、什么是Sprite精灵?
unity中2D的游戏对象,其实就是对图片进行处理。把图片转换成可以直接用在2D游戏中的格式,转换后的图片称为Sprite(精灵)。为了提高性能,一般美工会将不同的图片拼成一张大图,在unity中将每个图片读取出来作为Sprite使用。
2、如何创建Sprite精灵
①将一张图转成一个精灵
在Project面板中选中图片,在Inspector面板中修改Texture Type为Sprite(2DandUI),接着修改Sprite Mode 为Single,意为独个精灵,最后点击右下角的Apply应用。
②将一张图转成多个精灵
同上选中图片,修改Textture Type为Sprite(2DandUI),接着修改Sprite Mode 为Multiple,再点击Apply。一张图片转成多个精灵,一般用于将大图切割为若干小图,所有我要点击SpriteEditor打开编辑窗口。
SpriteEditor编辑窗口菜单点击Slice(切割),这里可以修改Type来修改切割方式,这里有三种切割方式,第一种是Automatic,进行自动切割,如果大图中的各个小图位置比较分明,使用自动切割会比较方便。第二种是Grid By Cell Size,意为通过设置单元格大小进行网格切割,第三种是Grid By Cell Count,意为通过设置行列数进行网格切割,后两种比较适合小图排列比较规律切大小相同的情况。当然,还可以手动修改Offset(偏移量)、Padding(边距)、Pivot(中心点位置)等等属性,切割出我们想要的精灵。设定好之后点击Slice,然后点击编辑窗口右上角的Apply。
③打包精灵
同一个精灵,在场景中多次实例化世,只渲染一次,所以为了提高性能,我们可以将多个精灵打包到一张大图上,值得注意的是,打包后的大图并没有实际的图片文件。
点击Edit->Project Settings->Editor中SpritePacker默认是Disabled(关闭的),需设置成AlwaysEnabled(LegacySpritePacker),然后我们为要打包的精灵设置Packing Tag,记得点击Apply,最后点击Window菜单,找到Sprite Packer并打开,然后点击Pack即可。
在Sprite Packer的菜单中我们还可以设置打包策略,第一种策略DefaultPackerPolicy是默认打包策略,打包后的大小是2的幂次方,有事会出现大量空间没有被利用。第二种策略TightRotateEnabledSpritePackerPolicy是紧密旋转打包策略,通过旋转减少两个精灵之间的空隙,从而减少图片的大小。第三种是TightPackerPolicy紧密打包策略,在不旋转的情况下,进行紧密打包。
④精灵的图层排序
2D游戏中的图片都是在同一个平面,所以我们要设置图层排序来体现视觉上的前后顺序。在场景中精灵的Sprite Renderer组件,有一个SortingLayer属性,点开后我们可以添加自己需要的图层,越靠下的图层,显示的越前。如果两个精灵属于同一个图层中,我们可以修改另一个属性OrderInLayer来进行排序,OrderInLayer属性的值越大,显示的越前。
二、2D物理组件
2D物理引擎和3D物理引擎基本功能相似,常用组件后缀一般有2D来表示是2D组件。
1.Rigidbody2D组件
Rigidbody2D这里介绍一下组件各个属性的含义
Body Type:刚体类型,一般都会使用Dynamic(动态的)
Material:物理材质2D
Simulated:是否模拟 (模拟包括:运动、Collider2D的碰撞、Joint2D的约束效果、是否驻留在内存)
Use Auto Mass:是否使用自动质量
Mass:质量
Linear Drag:线性阻力大小
Angular Drag:旋转阻力大小
Gravity Scale:重力缩放系数
Collision Detection:碰撞检测,这里可以调节检测的频率
Sleeping Mode:睡眠模式
2、Collider2D组件
和3D一样,2D游戏中也有各种各样的碰撞器,其中比较特别的是polygon collider2D(多边形碰撞器)
碰撞和触发的回调方法
OnCollisionEnter2D(Collision2D other):刚进行碰撞时调用
OnCollisionStay2D(Collision2D other):一直保持碰撞时调用
OnCollisionExit2D(Collision2D other):碰撞结束时调用
OnTriggerEnter2D(Collision2D other):刚触发时调用
OnTriggerStay2D(Collision2D other):一直保持触发时调用
OnTriggerExit2D(Collision2D other):触发结束时调用
需要注意的是无论是碰撞还是触发,Stay方法调用需要在碰撞和触发时保持运动
3、2D场景实现拖拽物体移动
private void OnMouseDrag()
{
float x = Input.mousePosition.x / Screen.width;
float y = Input.mousePosition.y / Screen.height;
Vector3 pos = Camera.main.ViewportToWorldPoint(new Vector3(x, y, 0));
pos.z = 0;
transform.position = pos;
}
三、2D动画
1、创建动画
可直接选择要创建动画的精灵,拖拽至场景窗口中,会弹出一下窗口
创建动画文件名就是你要创建的动画的名字,将其保存到需要的位置,创建完成后会生成一个动画片段文件,和一个动画控制器,同时会为精灵添加Animator动画控制器组件。
2、Animation面板
点击Window->Animation,打开Animation面板,点击动画片段,可以看到如下图所示:
Animation面板右边表示的是时间轴,一根竖线表示一帧
左边上方是控制动画播放预览的按钮,红色圆圈是录制按钮,下一行的开头是动画片段名,Samples表示值是每秒播放的帧数,数字越大,动画播放的越快,再往后一个按钮是添加关键帧,AddProperty,是为动画添加属性,包括位移、旋转、缩放等。