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 条评论
登录 后参与评论

相关文章

来自专栏Coco的专栏

【Web动画】SVG 实现复杂线条动画

1765
来自专栏伪君子的梦呓

用 Python 向你比个心

之前写了一篇用 Python 画一个小猪佩奇和哆啦 A 梦,然后最近看到有人用 turtle 画了一个心,觉得挺有意思的,于是把代码复制到本地,再加了个播放音乐...

603
来自专栏雨尘分享

iOS11:Xcode9 你需要知道的都在这里!Xcode 9 更新iOS 11 适配

1643
来自专栏理论坞

那些你不知道的Photoshop冷知识①——以一敌三的组合计

关于笔刷,用过PS的人基本上都知道几个快捷键,比如Ctrl+"["、"]"调整笔刷大小之类,这次我带来的方法比那个更加便捷,不但是大小上的调整,连同硬度和颜色都...

451
来自专栏阿凯的Excel

常见图表绘制(汇总版)

各位亲,分享了这么多期图表,打算做个汇总版的,方便各位以后查询。点击标题可以直接链接至对应的文章! 第一节:巧妙设置目标红线 ? 第二节:帕累托图绘制 ? 第三...

2786
来自专栏阮一峰的网络日志

一些颜色工具网站

网址:http://www.digitdesigns.com/colrPick/framePic.htm

721
来自专栏程序猿

用 Python 向你比个心

之前写了一篇用 Python 画一个小猪佩奇和哆啦 A 梦,然后最近看到有人用 turtle 画了一个心,觉得挺有意思的,于是把代码复制到本地,再加了个播放音乐...

1455
来自专栏理论坞

那些你不知道的Photoshop冷知识⑤——CC2015评测专题

笔者在探索新版本时,首先注意的便是首选项的变化,可以发现这次更新之后首选项侧边栏多了不少东西,点进去之后才发现原来是进行了重新分类,那么有哪些好玩的功能呢?介绍...

724
来自专栏滕先生的博客

react-native 跨平台滤镜集成

3328
来自专栏一“技”之长

iOS第三方星级视图控件——HCSStarRatingView

        HCStarRatingView是一款十分小巧的星级视图控件,其通过原生画图的方式来渲染星级视图页面,同时,其也支持开发者对星级图片的自定义操作...

612

扫描关注云+社区