什么是Sprite精灵
2D游戏中的游戏物体,实际上是对图片的处理。把图片的格式转换成可以直接用在2D游戏中的格式,转换后的图片称为Sprite(精灵),为了提高性能,2D游戏开发时,美工会将不同的图片拼成一张大图,在引擎中会把这张大图中的某一部分读出来作为Sprite显示在屏幕中。
精灵创建的两种方法
1.第一种方法:将美工制作好的包含多个小纹理图片的大纹理图片,导入到Unity中进行格式转换,然后使用SpriteEditor工具将大图分割成若干个Sprite使用,具体操作流程如下:
(1)导入一张图片到Unity中,如图:这里是将多个所用到的2D精灵放置在一张图片中:
(2)将Texture Type设置成Sprite(2D and UI),Sprite Mode设置成Multiple,可以将大图分割为几个小图:
(3)点击SpriteEditor打开编辑窗口,这里主要是对大小以及位置进行设置,方便分割图片:
(4)点击Slice Type为切割方式,可以设置每个被切割的精灵的大小
- Automatic 自动计算尺寸
- Grid By Cell Size 按照被切格子的大小
-
Grid By Cell Count 按照被切格子的数量(即大图被分为几行几列)
(5)选择合适的切割方式后点击Apply,对图片的操作如下图:
(6)如果剪切不符合要求,可以选择多余的网格,按Delete键删除,然后选中要放大的网格,在右下角窗口修改尺寸,或者拖动网格改变尺寸
(7)如果只是单独的精灵,Sprite Mode设置为Single,然后点击Apply即可
2.第二种方法:直接将原始图片导入到Unity中,使用Unity提供的SpritePacker工具将导入的图片打包,再从打包后的图片读取Sprite。
(1)SpritePacker打包精灵
Edit -> ProjectSetting -> Editor中SpritePacker默认是Disabled,需设置为AlwaysEnabled(LegacySpritePacker):
EnabledForBuilds:只有在到处游戏时使用。
(2)选中要打包的精灵,设置Packing Tag,点击Apply,相同的PackingTag值得精灵会打包到一个包里:
(3)然后打开Window -> Sprite Packer窗口,点击Pack即可,若干个小精灵打包到一个包里,等同于一张大图:
(4)打包策略:
- DefaultPackingPolicy:默认打包策略,图片正常排列,打包后的大小是2的幂次方,有时候会出现大量空间没有被充分利用。
- TightRotateEnabledSpritePackerPolicy:紧密旋转打包策略,通过旋转精灵,减少两个精灵之间的空隙,进而减少打包后整个图片的大小。
- TightPackerPolicy:紧密打包策略,在不旋转精灵的情况下让精灵进行紧密排列后在打包。
引擎对精灵的优化
- 同一个精灵,在场景中多次实例化时,只渲染一次,即DrawCall的值只会增加一次。
- 一张大图包含多个精灵时,在实例化其中一个精灵时,GPU会把整个大图加载到内存中,再实例化其他精灵时,DrawCall的值也只会增加一次。
- 如果多个精灵图片没有事先放到一张大图中,可以使用引擎打的精灵打包工具进行打包,打包后的精灵连续实例化的时候,DrawCall的值只会增加一次,打包后的资源会存放在工程文件夹中,是经过引擎处理过的,是不能直接读取出来
图层排序
游戏中的图片没有深度关系,都处于一个平面上,但在实际游戏中需要它们排序,按视觉的空间先后顺序显示。
- OrderInLayer:只对有相同的SortingLayer的精灵起作用。
- 可以先给不同的精灵设置不同的SortingLayer,然后再通过OrderInLayer对相同排序层的不同精灵进行排序,这样就会有层次感。
网友评论