大家好,我最近几个月一直在 Unity UI 中开发一个程序化的 roguelike 地图系统,想与大家分享我最后采用的方法。花了很多时间才找到合适的方法,比较难的部分包括: * 生成清晰的前进路径而不让地图变得混乱, * 使用 UI masks 和 scroll views 的方式绘制连接, * 保持导航流畅而不是抖动。 最终成功的方法是: * 多层生成与确定性抖动 不再随机放置所有内容,我在隐藏的层中生成节点并使用 FNV-1a 散列算法进行小范围的基于种子的抖动。这样一来,无论在哪个平台上,都会产生相同的图案。 * 贝塞尔曲线直接绘制在 UI 上 我放弃了 LineRenderer 并构建了一个自定义的 MaskableGraphic,直接在 Canvas 上绘制立方贝塞尔曲线。这样解决了掩码和缩放问题更加清晰。 * 对象池 重建一个有很多节点和路径的图可以引起不必要的 GC 突发,所以我将所有内容都放入对象池,而不是不断实例化和销毁对象。 * 更智能的自动缩放行为 我添加了一个 MapNavigator,只有当选中的节点接近屏幕边缘时才移动视图。这样整个系统的使用感就变得多了。 花了太多时间后,我清理了所有内容,添加了自定义的检查器,并建立了一个实时预览,以便在不进入 Play 模式的情况下测试种子。 我将其转化为一个名为 CraftMap 的框架,并在 Asset Store 发布了它。 我还提供了 3 张免费优惠券 作为启动礼物。如果您正在开发 roguelike、牌组建构器或任何类型的节点进展图,留下一条关于您正在工作的内容的评论,我将在明天随机选择 3 个开发者。 如果您有任何关于贝塞尔渲染、确定性生成或 UI 设置的问题,欢迎提问。