2017-08-09 33 views
0

好吧,所以我有点困惑Ressources.Load。我真的使用它很多,每个人似乎都认为这个功能是纯粹的邪恶。在这个documentation,它甚至写成“不要使用它”。我搜查了很多关于这个,发现this post。它主要是说只将Ressources.Load用于稀有资产,否则,性能可能会受到损害。我认为我滥用Ressources.load

我明白了为什么这可能是一个“坏”的东西使用,但老实说,我不知道如何不使用这个在我的情况。

可以说我有一场比赛,每场比赛有10场不同的比赛。用户选择了它的比赛并开始游戏。在这一点上,似乎正常我Ressource.Load不仅关系到这个特定种族的资产,而不是其他的...

而且,假设你有一个战斗场面,有许多可能的环境(即:冬季,森林,沙漠等)。再次,我不想加载任何比我正在努力的东西更多的东西。所以使用Ressources.Load似乎是最好的工具。没有?我是否错过了关于Unity的重要内容?

非常感谢

回答

1

这是真的,团结一切加载它看到连接到的东西在现场督察。一旦你在场景中,你无法停止Unity的加载。 (你可以稍后卸载,但它已经花费了所有的费用)在Unity的术语中,的表现似乎意味着在玩游戏时,因为如果你将它们连接到场景,它会从开始加载一切,并从此开始平滑播放,但如果你做动态负载,你在比赛中会有落后的风险。

请勿使用它。

此强烈推荐有几个原因提出:

使用的资源文件夹,使细粒度的内存管理更 困难。

这很难但并非不可能。如果你自己小心,那么你可以获得更低的内存消耗。

资源文件夹的错误使用会增加应用程序的启动时间和构建时间长度 。随着资源文件夹数量增加,文件夹 中资产的管理变得非常困难。

它不能提供帮助,因为您可以在场景启动时保存加载时间,但启动时间增加可能是值得的。在我看来,大多数玩家不会介意启动时间。

的资源系统,降低项目的 提供定制的内容与特定平台的能力和消除 增量的内容升级的可能性。 AssetBundle变体 是Unity针对每个设备调整内容的主要工具。

然后你只能将通用的东西放在Resources文件夹中。

一种现代的替代方法是在场景中组合你的游戏,并使用LoadSceneMode.Additive来逐一获得你想要的。它适用于像战斗场景这样的大块,但对于概念上很小的东西(但可能包含像纹理这样的大数据)的延迟加载,我仍然会使用Resources.Load。唯一延迟加载的内容是AudioClip,您可以取消选择预加载音频数据。

如果您有兴趣阅读,我在这里写了一个详细的加载过程和它的内存消耗。 https://gametorrahod.com/unity-texture-memory-loading-unloading-7054819e4ae8