Unity2D手册翻译(四)

Sprite Packer

在设计sprite图形时,每个角色一个单独的纹理文件比较方便。然而,通常认为,sprite纹理中图形元素间的空白空间,会浪费运行时显示内存。为了优化性能,最好把多个sprite纹理紧密的打包到一起至一个地图集(atlas)。Unity提供了一个 Sprite Packer 工具从分散的sprite纹理里去自动化生成地图集。

Unity 处理生成工程并且在场景背后使用sprite地图集,这样用户不需要手动调整。地图集可以被选择性的打包在进入Play模式时,或者构建期间,并且一个sprite对象的图形可以从地图集一建立的时候就获得。

用户需要在Texture Importer里面指定一个Packing Tag,启动用此Sprite纹理的打包。

使用Sprite Packer

Sprite Paker默认是关闭的,但你可以从Editor设定里配置(菜单: Edit->Project Settings -> Editor)。sprite packing mode可选择 DisabledEnable for Builds (比如打包只在构建而不是Play mode进行)或者 Alwas Enable (如在Play mode和构建的时候都启用)。

如果你打开Sprite Packer窗口(菜单:Windows->Sprite Pakcer)然后点击左上角的 Pack 按钮,你会看到打包到地图集里的纹理的布置。

如果你在Project面板选择一个sprite,它也会在地图集里被高亮显示。其轮廓正好是渲染网格的轮廓,并且它也定义了紧密打包所用的区域。

Sprite Pakcer窗口顶部的工具栏有一批控件影响打包和显示。 Pack 按钮初始化打包操作,但如果地图集从建立起都没有改变就不强制更新。(当你实现了一个自定义的打包策略,下面 Customizing the Sprite Packer 解释,一个相关的 Repack 按钮会显示)。 View AtlasPage # 菜单支持选择哪一个地图集的哪一页显示在窗口里(单一的地图集会被切分到多个“page”,如果最大的纹理吃春里无法显示下所有的sprite)。页号码旁边的菜单选择哪个“打包策略”用于此atlas(参看下面)。在工具栏右边有两个控件放大缩小视图,并且在彩色和透明度显示之间切换。

打包策略

Sprite Paker使用一个 pcaking policy 去决定如何在地图集中分配sprites。你可以建立自己的打包策略(下面说到),但Defalut Packer Policy, Tight Packer PolicyTight Rotate Enabled Sprite Packer Policy 选项常常是可以用的。在这些策略以内,在 Texture Importer 的 Packing Tag 直接选择sprite要打包进的地图集的名字,并且所有带同一个packing Tag的sprite都被被打包到同一个地图集中。地图集之后会根据纹理导入配置排序,以便他们为源纹理配合用户设置的东西。如果可能,带有同样纹理压缩配置的Sprite会被分组到同一个地图集。

  • 除非"[TIGHT]"在 Packing Tag(如设置成"[TIGHT]Character")被指定,DefaultPackerPolicy会默认使用矩形打包。
  • 如果Sprite有紧密网格,默认使用TightPackerPolicy。如果 Packing Tag 指定了"[RECT]",将使用矩形打包(如设置了"[RECT]UI_Elements",强制使用矩形打包)
  • 如果Sprite有机密网格并且可以旋转,则默认使用TightRotateEnabledSpritePackerPolicy。如果 Packing Tag 指定了"[RECT]",矩形打包会被完成(如设置了"[RECT]UI_Elements",强制使用矩形打包)

自定义Sprite Packer

虽然 DefaultPackerPolicy 选项能满足大多数的需求,但你还是可以在需要的时候实现自定义的打包策略。要做到这点,你需要在一个编辑器脚本里,实现UnityEditor.Sprites.IPackerPolicy接口。这个接口需要实现以下方法:

  • GetVersion - 返回你的打包策略的版本。如果修改已经做进了策略脚本,并且这个策略已经存到版本控制里,版本号应该凸显出来。
  • OnGroupAtlases - 在这里实现你自己的打包逻辑。在PackerJob上定义地图集,然后从给定的TextureImporter分配Sprites。

DefaultPackerPolicy默认使用矩形打包(参看SpritePackingMode)。如果你在用纹理空间效果或者想使用一个不同的网格去渲染Sprite,那么会非常有用。自定义策略可以覆盖这个并且代替使用紧密打包。

  • 只有在一个自定义策略选择的时候Repack按钮才可用
    • 除非TextureImporter元数据或者选择的PackerPolicy版本值修改的时候,OnGroupAtlases会被调用。
    • 使用你的自定义策略的是,使用Repack按钮
  • Sprites可以自动的用TighRotateEnabledSpritePackerPolicy旋转打包
    • SpritePackingRotation是一个将来Unity版本的保留类型。

其它

  • 地图集会在Project\Library\AtlasCache里缓存
    • 删除这个文件夹然后重启Unity会强制重新打包。Unity必须在做这个事情的时候关闭。
  • 地图集cache不会一开始就加载
    • Unity重启后,当第一次打包的时候,所有纹理必须被检查。这个操作可能会消耗一些时间,根据项目中纹理的总算来决定时间长短。
    • 只有用到的地图集被加载。
  • 默认最大地图集尺寸是2048x2048
  • 当PackingTag设置后,纹理不会被压缩,以便SpritePacker可以抓取原始像素值,然后在地图集里做压缩。

原文发布于微信公众号 - 韩大(handa1740168)

原文发表时间:2016-08-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏九彩拼盘的叨叨叨

将内容复制到剪切板兼容主流浏览器的解决方案

对于其他浏览器,google了半天,发现不太好搞,比如 对于firefox,要让网站的js有使用剪切板的权限是要用户授权的 http://kb.mozilla...

432
来自专栏Flutter入门

Android 屏幕录制GIF脚本

因为一直需要将Android手机上的效果录制下来,转成gif,然后上传到博客上。 原来都需要手动操作好几次,所以索性的写了一个脚本来配合使用。

1031
来自专栏阿炬.NET

jQuery EasyUI 1.3.2 离线API、Demo

2365
来自专栏吴小龙同學

Android屏幕适配不同的资源图片、布局

在Android 2.1版本之前,存放资源图片的文件夹名称为drawable,应用程序用到的所有的资源图片都放在其中,所以很难解决不同屏幕大小的图片适配问题。 ...

3577
来自专栏非著名程序员

简单高效的实现 Android App 全局字体替换

Android O推出了一项新的功能「Fonts in XML」,借助这项功能,我们能够像使用其他资源文件一样使用字体,比较方便地实现App全局字体的替换。 为...

2459
来自专栏日常学python

用python来给图片加水印

有时候我想在图片上添加自己的水印来防止别人盗图,所以今天给大家分享如何用python给我们的图片添加上水印。我们先来看看效果。

923
来自专栏IMWeb前端团队

chrome开发者工具小技巧

Chrome 开发者工具是一款Web开发者们公认的优秀的前端调试工具,本身功能强大,有了这个工具,你可以做很多有趣的事情。 快速编辑HTML元素 ? 在Ele...

1735
来自专栏汇智网教程

以太坊钱包Metamask下载和安装方法

1.1K12
来自专栏古时的风筝

如何应用Font Awesome矢量字体图标

Font Awesome 是一套专门为 Twitter Boostrap 设计的图标字体库。这套图标字体集几乎囊括了网页中可能用到的所有图标,除了包括 Twit...

2036
来自专栏极客生活

数据分析Excel之常用快捷键

下面是mac下常用的的excel快捷键,其中Cmd在windows下对应Ctrl键

731

扫码关注云+社区