如何在Unity上开发Nintendo(任天堂)Switch平台游戏时让游戏patch包大小尽量小

如何在Unity上开发Nintendo(任天堂)Switch平台游戏时让游戏patch包大小尽量小

众所周知,Nintendo Switch有一条guidline-0123来限制游戏的patch包大小上限是512MiB。
如果你的游戏是使用Unity开发的,只要你不正确合理的使用Assets Bundle/Addressable Assets的话,你将会得到一个包体很大的patch包。
首先,你应该需要了解Nintendo Switch的patching system机制:
Nintendo Switch使用的是基于16字节块二进制匹配的增量打补丁机制。换句话说,如果它找到二进制块完全匹配的话,它将继续使用来自初始的ROM包里的老data;在patch包里仅会包括新版本和初始版本的不同数据块。
所以你需要尽可能的去遵循这条规则,以确保你打出的patch包大小尽可能的小。

我还得指出一点,在打patch包的时候Unity它自己的一些东西的改动会占用patch包32MiB(Unity2020.1以后大约是27.16MiB)的大小。这就只给游戏留下了480MiB(Unity2020.1以后大约485MiB)的大小patch空间。

以下是一些让游戏打出来的patch包大小尽量小的建议:

  1. 除非你的游戏永远不会超过512MiB,那么你就不要把Build Settings->Compression Method设置成除Default以外的其他设置。
  2. 使用Assets Bundle/Addressable Assets来动态加载scenes资源,而不要用整个完整的scenes bundle。
  3. 尽量让游戏的第一个scene足够“轻”来缩短游戏从启动到第一帧被绘制出来的时间。你可以把较“重”的scenes分解成多个小的较“轻”的scenes,然后使用异步的加载它们(可以使用LoadSceneMode.Additive)。
  4. 你应该控制你划分Assets Bundle/Addressable Assets粒度大小。如果划分的太大,任何一个Asset的改动就不能很好的隔离在一个较小的范围内;如果划分的太小,游戏将需要花更多的时间从硬盘上去加载它们。
  5. 在游戏发布以后就不要rebuild或修改asset bundle/asset group。如果对于修改的resources你只是简单的新增一个新的asset bundle/group并且从这里提取它们而不是从老的bundle里,那你将会获得一个更小的patch包。
  6. 将那些可能发生改变的resources和那些不会发生改变的隔离开。
  7. 如果你必须修改那些存在已发布的assets bundle里的assets的话,一种最有效地方法是把那么需要修改的assets放到一个新的bundle里,但是这种方法需要手动的加载和卸载这些新的变异的bundle和assets。幸运的是,Unity从2018.2以后新增了 Addressable Assets让这个过程变简单了。
  8. 如果你使用Assets Bundles,建议你使用ChunkBasedCompression(LZ4)压缩选项来提高加载时间和缩小patch尺寸。
  9. 如果你使用Addressable Assets,建议你使用LZ4压缩来提高加载时间和缩小patch尺寸(在Unity2020.1以后,如果你的游戏加载时间是可以接受的话,建议尝试使用不压缩Assets groups)。
  10. 一定不要使用LZMA压缩来压缩addressable asset groups。
  11. 如果你使用Addressable Assets,在AddressableAssetSettings里关掉Log Runtime Exceptions选项。
  12. 当你在游戏build里配置有asset group,确保设置Bundle Naming为FileName或者Use Hash of Filename。其他选项将会改变bundle的名字如果你改变该asset group里的任何asset。
  13. 如果你知道那些可能发生改变的assets,把它们分别放到不同的assets groups或者把它们整合到一个单独的assets group,并且把Bundle Mode设置成Pack Separetely。
  14. 使用Addressables Analyze功能来找出那些被包含在多个asset groups里的冗余assets。

以下是使用Addressables Analyze功能的示例。
Addressables Analyze窗口:
在这里插入图片描述
重新打开以后,就会有一个新的名叫Duplicate Asset Isolation的group。它包含了所有被包含在多个asset groups里的冗余assets。
在这里插入图片描述
以下是一个建议在AddressableAssetSettings里asset groups的配置示例:
在这里插入图片描述
在这里插入图片描述
在你提交游戏初始Nintendo ROM前,尝试修改一个你认为以后可能会改变的asset,然后创建一个patch,并且使用AuthoringEditor或者AuthoringTool.exe来分析这个patch来看看你的游戏现在是否在assets管理方面足够好!
在这里插入图片描述
在这里插入图片描述
你也可以使用AuthoringTool的"list"命令来列出你的.NSP文件里包含了些什么东西。并且你可以加上 --patched-only-in-detail命令选项来查看哪些文件是在patch包里,哪些文件在初始的ROM包里。
%NINTENDO_SDK_ROOT%\Tools\CommandLineTools\AuthoringTool\AuthoringTool.exe
list (your patch.nsp) --original (your initial.nsp) --patched-only-in-detail

C:\WINDOWS\system32>%NINTENDO_SDK_ROOT%\Tools\CommandLineTools\AuthoringTo
ol\AuthoringTool.exe list modified_asset_patch.nsp --original original_v0.nsp --patched-only-indetail
add4524cd2c89a9865b182be6f8f9893.nca (55465472 byte)
dabf0ac9b8c30e698fbb6e1d15662186.nca (143872 byte)
6ab0afdb77c658f511381977cd4ded79.cnmt.nca (3584 byte)
6ab0afdb77c658f511381977cd4ded79.cnmt.xml (2358 byte)
add4524cd2c89a9865b182be6f8f9893.programinfo.xml (154777 byte)
dabf0ac9b8c30e698fbb6e1d15662186.raw.AmericanEnglish.jpg (172759 byte)
dabf0ac9b8c30e698fbb6e1d15662186.nx.AmericanEnglish.jpg (41328 byte)
dabf0ac9b8c30e698fbb6e1d15662186.nacp.xml (12199 byte)
01004b9000490800000000000000000a.tik (704 byte)
01004b9000490800000000000000000a.cert (1792 byte)
cardspec.xml (193 byte)
authoringtoolinfo.xml (449 byte)
---------------------------------------------**
add4524cd2c89a9865b182be6f8f9893.nca/fs0/main (19769316 byte)
add4524cd2c89a9865b182be6f8f9893.nca/fs0/main.npdm (1540 byte)
add4524cd2c89a9865b182be6f8f9893.nca/fs0/rtld (6790 byte)
add4524cd2c89a9865b182be6f8f9893.nca/fs0/sdk (5372429 byte)
add4524cd2c89a9865b182be6f8f9893.nca/fs0/subsdk0 (3522324 byte)
add4524cd2c89a9865b182be6f8f9893.nca/fs1/Data/globalgamemanagers (58800 byte)
[Original]
(offset, size)(0, 31024), (31056, 27744)
[Patch]
(offset, size) = (31024, 32)
add4524cd2c89a9865b182be6f8f9893.nca/fs1/Data/level0 (6771144 byte)
[Original]
(offset, size)(0, 5647200), (5668464, 1057376), (6725872, 45272)
[Patch]
(offset, size) = (5647200, 21264), (6725840, 32)
add4524cd2c89a9865b182be6f8f9893.nca/fs1/Data/sharedassets0.assets (28736932 byte)
[Original]
(offset, size)(0, 11184), (12240, 15489792), (15502432, 12222736), (27727424, 1009508)
[Patch]
(offset, size) = (11184, 1056), (15502032, 400), (27725168, 2256)
add4524cd2c89a9865b182be6f8f9893.nca/fs1/Data/sharedassets0.assets.resS (199614828 
byte)
[Original]
(offset, size)(0, 172802592), (177005056, 62672), (179801280, 52192), (185339296, 91536), 
(185443936, 57968), (188189920, 64496), (190986144, 64496)
[Patch]
(offset, size) = (172802592, 4202464), (177067728, 2733552), (179853472, 5485824), 
(185430832, 13104), (185501904, 2688016), (188254416, 2731728), (191050640, 8564188)
dabf0ac9b8c30e698fbb6e1d15662186.nca/fs0/control.nacp (16384 byte)
dabf0ac9b8c30e698fbb6e1d15662186.nca/fs0/icon_AmericanEnglish.dat (41328 byte)
6ab0afdb77c658f511381977cd4ded79.cnmt.nca/fs0/Patch_01004b9000490800.cnmt (356 
byte)

在这里插入图片描述

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值