【问题标题】:I think I abuse of Ressources.load我认为我滥用 Resources.load
【发布时间】:2018-01-16 19:50:20
【问题描述】:

好吧,我对Ressources.Load 有点困惑。我实际上经常使用它,每个人似乎都认为这个功能纯粹是邪恶的。在这个documentation 中,甚至写着“不要使用它”。我对此进行了很多搜索,发现this post。它主要是说仅将 Ressources.Load 用于稀有资产,否则,性能可能/将会受到损害。

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

假设我有一个包含大约 10 个不同种族的游戏,每场比赛有几个单位。用户选择它的比赛并开始游戏。在这一点上,Ressource 对我来说似乎很正常。仅加载与该特定种族相关的资产,而不是其他资产......

另外,假设您有一个战斗场景,有许多可能的环境(即:冬天、森林、沙漠等)。再说一次,除了我正在战斗的那个,我不想加载其他任何东西。所以使用 Ressources.Load 似乎是完美的工具。不?我是否遗漏了 Unity 的一些重要内容?

非常感谢

【问题讨论】:

    标签: unity3d unity5 unityscript


    【解决方案1】:

    确实,Unity 会加载它看到的与场景中检查器中的事物相关的所有内容。一旦进入场景,就无法停止 Unity 的加载。 (你可以稍后卸载,但加载它们已经付出了代价)性能受损在 Unity 的术语中似乎是指在播放时,因为如果你将它们连接到场景,它会从开始加载所有内容,然后从那时起播放流畅,但如果您进行动态加载,则可能会在播放时出现滞后。

    不要使用它。

    提出此强烈建议有几个原因:

    Resources 文件夹的使用使细粒度的内存管理更加精细 困难。

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

    Resources文件夹使用不当会增加申请量 启动时间和构建的长度。作为资源的数量 文件夹增加,管理这些文件夹中的资产 变得非常困难。

    这无济于事,因为在场景开始时可以节省加载时间,增加的启动时间可能是值得的。在我看来,大多数玩家不会介意启动时间。

    资源系统降低了项目的 能够向特定平台提供自定义内容并消除 增量内容升级的可能性。 AssetBundle 变体 是 Unity 根据设备调整内容的主要工具。

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-03
      • 2021-01-25
      • 2016-09-16
      • 1970-01-01
      • 2011-05-07
      • 2018-04-26
      • 2018-06-14
      • 2021-11-04
      • 2015-07-30
      相关资源
      最近更新 更多