【发布时间】:2021-10-17 10:12:27
【问题描述】:
游戏由玩家和场地组成。地面是相对于之前的立方体实例化的立方体,在其右侧或左侧。玩家的目标是向正确的方向滑动或移动并降落在地面(立方体)上。
但是,我只成功地实例化了有限数量的立方体,而没有因为实例化立方体的无限循环而导致 Unity 崩溃。
我还尝试在不再处于相机视图中时从底部销毁一个立方体(使用OnBecomeInvisible() 方法),以便能够在实例化的有限数量的立方体的顶部实例化一个立方体,如给人一种无尽游戏的感觉,但是当相机跟随玩家时,一些立方体出现在场景的最左边或最右边,但随着相机再次居中它们不再可见,这反过来又在甚至之前摧毁了立方体玩家降落在立方体上或查看它。
会让地面滚动,当它下降到某个 Y 值以下时,它会被破坏,因为它不在相机的视野范围内,行吗?我已经尝试过了,但我觉得它应该可以工作。
还有其他方法吗?
【问题讨论】:
-
鉴于您的 RAM 有限,无限对象不起作用。 |我将使用的结构将接近队列 - 一个有限的“活动立方体”列表。如果您需要超过限制,则最旧的立方体将首先被丢弃以腾出空间 - 其他所有东西都会向上移动。请注意,内置队列可能不起作用,因为它不允许读取访问(显示)所有中间多维数据集。
-
您能否解释一下“先放下以腾出空间 - 其他一切都会向上移动”是什么意思?
-
这可以通过“对象池”来解决。想象一下像 Flappy Bird 或 Galaga 这样的游戏——他们显然需要不断地制作新对象。那么,他们如何做到这一点,而不会产生让 Google Chrome 脸红的内存账单呢?通过构建具有有限数量实例的池对象,并在需要时将以前的实例重新分配到新位置。这是detailed tutorial on Object Pooling。
标签: c# unity3d instantiation