前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity2D手册翻译(四)

Unity2D手册翻译(四)

作者头像
韩伟
发布2018-03-05 16:01:26
2K0
发布2018-03-05 16:01:26
举报
文章被收录于专栏:韩伟的专栏韩伟的专栏

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可以抓取原始像素值,然后在地图集里做压缩。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 韩大 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Sprite Packer
    • 使用Sprite Packer
      • 打包策略
        • 自定义Sprite Packer
          • 其它
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档