LayerProcGen
LayerProcGen是一个用于实现基于层的程序化生成的框架,具有无限、确定性和上下文相关的特点。它可以直接在Unity中使用,但也可以在任何支持C#的引擎中使用。
该框架本身并不包含任何程序化生成算法。它的核心是一种以强大的空间方式跟踪生成过程之间依赖关系的方法。
自Minecraft以来,分块生成无限世界已经是一个广为人知的概念。
然而,普遍存在一种误解,认为基于分块的方法无法确定性地用于那些需要周围环境影响块本身的算法。
LayerProcGen的设计正是为了解决这个问题。
特性
上下文相关 & 确定性
该框架的一个核心目的是支持上下文相关的生成,同时保持确定性。程序化操作可以跨越块边界执行,为基于上下文的操作(如模糊、点松弛或路径寻找)产生无缝结果。这是通过将生成过程分为多个层并严格分离每层的输入和输出来实现的。
上下文相关生成
有意图地大规模规划
一个层中的块可以比另一个层中的块大几个数量级,你可以设计它们在不同的抽象层次上运作。你可以使用自上而下的规划,例如让路标指向远处的位置,根据玩家进度解锁整个区域,或让NPC谈论大陆另一端的事物。
大规模规划
自带算法
你可以通过创建层和块类的配对来实现数据层,只要这些技术适合即时分块生成,你可以在其中使用任何你想要的生成技术。
层和块
处理依赖关系
该框架使得构建多个具有相互依赖关系的基于块的程序化数据层成为可能。当其他层的块或顶层需求需要时,它会自动生成所依赖的块。
层依赖关系
二维无限性
该框架在水平或垂直平面上排列块。它可以用于2D或3D世界,但3D世界只能在两个维度上无限延伸,类似于Minecraft。这种无限性是伪无限的,因为它受到32位整数范围的限制,以及你在程序化过程中使用的具体计算方法。
多线程
该框架基于.Net中的Parallel.ForEach功能实现多线程。并行度会自动根据可用核心数量进行调整。必要时,可以将操作排队在主线程上执行。
在Unity中安装
LayerProcGen需要Unity 2019.4或更高版本。
通过以下Git URL作为Unity Package Manager包安装LayerProcGen:
https://github.com/runevision/LayerProcGen.git#upm
请参阅Unity的说明。如果你已经安装了Git,只需执行以下步骤:
- 通过
Window > Package Manager
打开Package Manager窗口 - 点击
+
按钮并选择Add package from git URL...
- 粘贴URL:
https://github.com/runevision/LayerProcGen.git#upm
- 点击
Add
示例
你还可以在包的Samples
标签页中导入使用该框架的示例。
Simple Samples没有特殊要求。
Terrain Sample需要:
- Burst包
- Input System包
- 播放器设置:启用
Allow unsafe code
- 播放器设置:将
Active Input Handling
设置为Both
- 仅在内置渲染管线中测试过
平台支持
该功能通常可以在所有平台上运行。
保存状态功能依赖于开源的FBPP(基于文件的玩家偏好设置)解决方案,该方案已在Windows、MacOS、Linux、iOS和Android上测试过。对于为其他平台移植游戏的开发者来说,将其扩展到其他平台可能相对简单。
许可证
LayerProcGen使用Mozilla公共许可证2.0版。
你可以在这里阅读摘要。简而言之:如果你对LayerProcGen进行了修改/改进,你必须免费与社区分享这些修改。但你的游戏或应用程序的其他源代码不受此许可证约束,因此没有任何因素阻止你创建使用LayerProcGen的专有和商业游戏。