c# - 如何存储和恢复无限世界?

标签 c# unity3d io procedural-generation

我正在尝试在 Unity 中编写具有无限世界的 2D 游戏。它应该像泰拉瑞亚一样,除了在各个方向上都是“无限”的。因此,当玩家移动时, block 会在旅途中生成、存储和加载。我的问题是: block 是如何存储并随后加载到内存中的?我找不到与此主题相关的任何教程。我假设这么大的数组必须存储在磁盘上,但是磁盘 IO 不是很慢吗?假设我正在尝试在玩家周围加载一个由 5 个 block 组成的大正方形(玩家站立的中心 block 和每个方向 2 个 block )。这是否意味着,如果玩家不断地在两个 block 之间来回移动,我将不得不继续加载和存储该已加载 block 的每一侧的 5 个 block ?会不会很慢?

最佳答案

你可以做的是,如果玩家距离 2 个区 block ,则加载区 block ,但除非玩家距离 4 个区 block ,否则不要卸载它们。

假设玩家向右走:(这里 X 是玩家,a b c.. 是 block ,在 [] 是加载半径内的加载 block ,() 是卸载半径内的加载 block )

a b c (d) (e) [f] [g] [X] [i] [j] k l

如果他决定回到 block g,那么 block e 不需要加载(它已经是)和 block j 没有卸载(它不在卸载半径之外)。

a b c (d) [e] [f] [X] [h] [i] (j) k l

如果他想回到 block h,同样,不需要加载或卸载任何 block 。所以他可以在 block 之间来回跳动而无需任何加载/卸载。

关于c# - 如何存储和恢复无限世界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45137624/

相关文章:

c++ - 内联汇编,输出指令

c# - 使用 Windows 资源管理器的重命名事件 Hook 我的程序

c# - 如何使用 C# 从 Active Directory 中删除计算机帐户

c# - Quickfix/n,提取消息类型的最有效方法?

当使用 Unity3D 和 OneSignal 订阅推送通知时,iOs 因 NSInvalidArgumentException 而崩溃

user-interface - Unity3d。如何获取ui元素的屏幕或世界位置

c# - 如何知道 ".exe"进程是用 C++ 还是 C# 编写的?

c# - 在 postgresql 表中插入时如何设置 DateTime.Now?

firebase - 如何处理 Unity 上的 Firebase 身份验证错误

Java PrintWriter 文件覆盖