如何存储和恢复无限世界?
How are infinite worlds stored and restored?
我正在尝试在 Unity 中编写具有无限世界的 2D 游戏。除了每个方向的 "infinite" 之外,它应该像 Terraria。因此,当玩家移动时,块会在旅途中生成、存储和加载。我的问题是:块是如何存储并随后加载到内存中的?我找不到与此主题相关的任何教程。我假设这么大的数组必须存储在磁盘上,但是磁盘 IO 不是很慢吗?假设我正在尝试在玩家周围加载一个由 5 个块组成的大正方形(玩家站立的中心块和每个方向 2 个块)。这是否意味着,如果玩家不断地在两个块之间来回移动,我将不得不继续加载和存储该已加载块的每一侧的 5 个块?会不会很慢?
你可以做的是,如果玩家距离 2 个区块,则加载区块,但除非玩家距离 4 个区块,否则不要卸载它们。
假设玩家向右走:(这里 X
是玩家,a b c..
是区块,[]
是加载半径中的加载区块, ()
是卸载半径内的加载块)
a b c (d) (e) [f] [g] [X] [i] [j] k l
如果他决定返回块 g
,则不需要加载块 e
(它已经是)并且不需要卸载块 j
(不在卸载半径外)
a b c (d) [e] [f] [X] [h] [i] (j) k l
如果他想回到块h
,同样,不需要加载或卸载任何块。所以他可以在没有任何 loaing/unloading.
的块之间来回跳转
我正在尝试在 Unity 中编写具有无限世界的 2D 游戏。除了每个方向的 "infinite" 之外,它应该像 Terraria。因此,当玩家移动时,块会在旅途中生成、存储和加载。我的问题是:块是如何存储并随后加载到内存中的?我找不到与此主题相关的任何教程。我假设这么大的数组必须存储在磁盘上,但是磁盘 IO 不是很慢吗?假设我正在尝试在玩家周围加载一个由 5 个块组成的大正方形(玩家站立的中心块和每个方向 2 个块)。这是否意味着,如果玩家不断地在两个块之间来回移动,我将不得不继续加载和存储该已加载块的每一侧的 5 个块?会不会很慢?
你可以做的是,如果玩家距离 2 个区块,则加载区块,但除非玩家距离 4 个区块,否则不要卸载它们。
假设玩家向右走:(这里 X
是玩家,a b c..
是区块,[]
是加载半径中的加载区块, ()
是卸载半径内的加载块)
a b c (d) (e) [f] [g] [X] [i] [j] k l
如果他决定返回块 g
,则不需要加载块 e
(它已经是)并且不需要卸载块 j
(不在卸载半径外)
a b c (d) [e] [f] [X] [h] [i] (j) k l
如果他想回到块h
,同样,不需要加载或卸载任何块。所以他可以在没有任何 loaing/unloading.