查找场景Unity中使用的资源列表

时间:2018-10-26 10:12:37

标签: unity3d

我正在尝试缩小构建尺寸。我压缩了一些纹理,这有助于我稍微减小尺寸。为了进一步减少,我想检查保存在资源文件夹中的文件。有多个资源文件夹。一段时间以来,我们在Resources文件夹中使用了不同的虚拟填充。这是我的计划:

  1. 列出所有基于场景的资源。

    我设法使用 Resources.LoadAll()获取资源列表 功能。

    我也得到了场景的列表。

    我不知道如何获取特定场景中使用的资源列表。

  2. 我可以与原始资源进行比较,并获得未使用资源的列表。

关于如何执行此操作的任何想法?

2 个答案:

答案 0 :(得分:2)

  

我不知道如何获取特定资源的清单   场景。

不能这样做,请不要花太多时间尝试这样做,因为:

1 。将资源文件放置在Resources文件夹中后,它将被包含在最终版本中。

2 。从特定脚本中的场景调用Resources.Load应该被认为是在场景中使用该资源,但是由于这是通过代码完成的,因此您无法对其进行计数。没有办法将其视为已使用。

3 。将资源文件夹之外的任何资源数据分配给脚本中的公共变量,将使该资源文件包含在资源文件夹中。即使这样,您仍然无法计算特定场景中使用的资源。


您可以做的一件事是为每个场景保存一个资源管理器脚本,该脚本将保存资源文件,然后可以使用该脚本来检索场景使用的资源文件。尽管如此,由于我上面提到的件事,这样做还是没有意义的。如果要减小构建大小,则可以使用Resources文件夹并开始使用AssetBundle

答案 1 :(得分:2)

正如@Programmer所说,这是不可能的。资源文件夹中的所有内容都会自动包含在您的版本中,以便您可以通过代码中的Resources.load加载资源。

我建议养成不要使用Resources文件夹的习惯,除非有必要通过Resources.Load加载该资源。这种做法将有助于减少构建中包含的未使用资源的数量。而是使用Unity Inspector互相引用资源,在脚本中设置对公共变量的引用,等等。

您可以通过搜索Resources.Load的实例来找出代码加载了哪些资源,从而进行一些重构。可以将其他所有内容移动到未命名为“ Resources”的文件夹中(请使用其他名称,例如“ Resources_Managed”,以避免将其视为special Unity folder)。


注意:official Unity Tutorial for best practices for the Resources folder说不要使用资源系统:

  

资源系统最佳实践

     

请勿使用。 [...]

     

Resources文件夹的易用性使其成为快速执行任务的出色系统   原型。但是,当一个项目全面投入生产时,   应该删除“资源”文件夹中的“”。


注意:它不会直接回答您的问题,但是这个付费的Unity资产商店插件可能对您有用:Asset Usage Finder [我与该工具没有任何联系,尽管我确实使用它用于我的项目。] 。它不能列出特定场景中使用的所有资源,但是可以告诉您项目中特定资源的引用位置。 (当然,它无法检测是否通过Resources.Load加载了资源)。还包含源代码,因此应该有可能编写工具来完成您想要的操作(但这将需要大量工作)。