关注

我怎样才能知道我的场景Bundle中有什么东西?

 

问题

  • 您有一个创建好的场景bundle,但您不知道这个bundle里面有什么东西。
  • 您有一个创建好的场景bundle,但它的占用空间超出您的预料,并且您想知道什么它是那么大。

 

原因

Unity中的场景在放进一个bundle之前是当作一个序列化对象的集合来对待的。这就意味着,当场景被添加进bundle时,是作为一个序列化场景对象来引入的,并且会在资源bundle的清单列表上出现<SceneName>.unity这一项。这样的话查找序列化场景对象中的单个对象就会显得有些困难。

 

解决方案

请注意:以下方法只适用于Unity5.4或更新的版本

您需要使用Unity安装目录中两个不同的工具来解包场景bundle从而发现里面的东西。

您可以在各自的平台中的默认安装目录找到这些工具:

Windows:

C:\Program Files\Unity\Editor\Data\Tools

Mac OSX:

/Applications/Unity/Unity.app/Contents/Tools

首先要使用WebExtract,它可以把场景bundle提取成一个解压数据文件夹。然后要使用 binary2text,他可以把场景bundle信息转化为人类可理解信息。

这些都是命令行工具,需要运行在命令行窗口或终端窗口。首先,运行一个路径转移命令转移到上面所指定的目录。

例子:

  1. 运行以下命令:

cd /Applications/Unity/Unity.app/Contents/Tools

  1. 运行webextract:

WebExtract <FilePathToSceneBundle>

这样就能把数据提取到一个文件夹中,其命名格式问您的场景bundle名字追加_data(如YourSceneBundleName_data)。

  1. 运行binary2rext:

binary2text YourSceneBundleName_data/BuildPlayer-SceneBundleName"

这样会产生一个含有场景bundle里的所有序列化对象信息的文本文件。文本文件中的每个对象看上去是这样的:

对象的ID号是对象在场景bundle里面的下标。

Class ID用于索引对象的类型 – 详见Class ID reference documentation以了解更多信息。

binary2text工具同样提供了class ID的文本信息(上面的例子显示为LightProbes)。您可以查找对象中的每个变量,列出变量的值和类型,例如:

  • m_Name是一个变量名
  • “”是它的值
  • (string)是它的类型

 您可以用这种方式分解每个变量,以带缩进列表的形式展示它们。

 使用这个文本文件,您应该就可以确切地知道你的场景bundle中存在什么东西了。

 

更多信息

如果您想看到包含在非场景bundle中的资源,您可以打开清单文件(.manifest),它是随资源bundle生成的时候在同一个根目录同时生成的。在manifest文件中,您可以在 Assets:这个域下看到资源的列表。

下方的截屏中可看到清单文件是怎么样的。请注意 Assets:域下的 “Assets/MyImageName.png”- 这是bundle下的这个资源的文件路径。Bundle中的每个资源都会出现在列表中。

 

 您还可以加载bundle和bundle中的每个对象来查看bundle中有什么东西。

 

请查看AssetBundle API和 AssetDataBase API以了解更多工具所提供的功能。

这篇文章有帮助吗?
2 人中有 2 人觉得有帮助
还有其它问题?提交请求

0 评论

登录写评论。