在一帧中实例化多个对象或每帧一个对象?

问题描述 投票:0回答:3

这个想法很简单,在Awake中使用随机值“实例化地图”。

但问题是:我应该在一帧中实例化整个地图(使用Loop)吗?或者更好地每帧实例化每个对象?

因为我不想通过在不到一秒的时间内实例化300个游戏对象来破坏玩家的内存。

performance loops unity3d random
3个回答
1
投票

无论是否在一帧中实例化所有gameobjects,它们总是以相同的方式结束在RAM中。 “破坏”某人的公羊的唯一方法是实例化这么多的gameobjects,直到没有记忆。考虑到统一的典型prefab大小只有几kb,而现在典型的RAM大小只有几GB,那将需要大约一百万个游戏对象。


0
投票

永远不要制作依赖于镜架的东西!有一些例外,这可能是好的,但大部分时间不是。

好的情况: - 增量垃圾收集(仍然有缺点)

不好的情况: - 你的情况,加载地图应该在开头

为什么我不应该依赖游戏帧?

  • 因为,PC具有不同的计算速度,哈利波特II就是一个很好的例子,该游戏是针对每秒30帧的机器开发的,现代机器可以非常快速地运行该游戏,因此游戏基本上加速了,你需要手动调节CPU使游戏可玩。
  • 另一个例子是统一增量时间,这是你在多个帧上移动物体时使用它的原因,因为它考虑了最后帧的计算速度

加载游戏时,300个对象也没什么,从玩家的角度来看也是如此:

什么是更好的10秒加载,或30秒15 fps然后正常速度(上面的例子夸大了)


0
投票

加载地图时,您可以在进入场景的开始时异步进行。这样您就可以在加载期间放置一个加载屏幕。如果您正在制作单人游戏,这是一个很好的方法。如果是多人游戏,你需要在服务器上为每个其他玩家同步它。加载场景异步的方法是SceneManager.LoadSceneAsync()

如果您在运行时尝试实例化对象,因为您想要随机化某些对象,我建议您通过进入场景来加载每个不需要随机化的对象(因此将它们放入场景中)。

这就是我如何解释你的问题告诉我,如果我错了。

© www.soinside.com 2019 - 2024. All rights reserved.