好的,我对Ressources.Load感到有些困惑。我实际上使用它很多,每个人似乎都认为这个特征是纯粹的邪恶。在这个documentation中,它甚至写成“不要使用它”。我搜索了很多关于此的信息并找到了this post。它主要是说使用Ressources.Load只用于稀有资产,否则,性能可能会/将会受到损害。
我可以理解为什么这可能是一个“坏”的东西,但老实说,我不知道在我的情况下如何不使用它。
让我们说我有一场比赛,每场比赛有10对不同的比赛。用户选择了它的比赛并开始游戏。在这一点上,Ressource对我来说似乎很正常。只负责与这个特定种族相关的资产,而不是其他种类...
另外,假设您有一个战斗场景,有许多可能的环境(即:冬季,森林,沙漠等)。再一次,我不想加载除了我正在战斗的那个之外的任何东西。所以使用Ressources.Load似乎是完美的工具。没有?我错过了关于Unity的重要事项或者什么?
非常感谢
答案 0 :(得分:1)
Unity确实加载了它看到的与场景中的检查器中的内容相关的所有内容。一旦你进入场景,你就无法阻止Unity的加载。 (你可以稍后卸载,但它已经承担了加载它们的费用)在Unity的术语中表现受到伤害似乎意味着在玩游戏时,因为如果你将它们连接到它加载的场景从开始到播放的所有内容从那时开始流畅,但如果你进行动态加载,你就有可能在玩游戏时陷入困境。
不要使用它。
这一强烈建议有以下几个原因:
使用Resources文件夹可以进行更细粒度的内存管理 困难的。
这很困难但并非不可能。如果你自己小心,那么你可以获得更低内存消耗的奖励。
不正确使用Resources文件夹会增加应用程序 启动时间和构建时长。由于资源数量 文件夹增加,管理这些文件夹中的资产 变得非常困难。
它可以提供帮助,因为可以在场景启动时保存的加载时间抵消,增加启动时间可能是值得的。在我看来,大多数玩家都不会介意启动时间。
资源系统会降低项目的性能 能够将定制内容提供给特定平台并消除 增量内容升级的可能性。 AssetBundle Variants 是Unity在每台设备上调整内容的主要工具。
然后你只将普遍适用的东西放在Resources文件夹中。
现代替代方法是在场景中构建游戏并使用LoadSceneMode.Additive
逐个获得您想要的内容。它适用于像战斗场景这样的大块,但是对于概念中的小东西的延迟加载(但可能包含像纹理这样的大数据),我仍然会使用Resources.Load
。唯一延迟加载的是AudioClip
,您可以取消选择预加载音频数据。
如果您有兴趣阅读,我在这里写了详细的加载过程及其内存消耗。 https://gametorrahod.com/unity-texture-memory-loading-unloading-7054819e4ae8