#bevy #gamedev #bevy-plugin #同伦

charred-path

基于组件的Bevy插件,用于跟踪移动对象在指定点集中的路径和同伦数据

1个不稳定版本

0.1.1 2024年3月6日
0.1.0 2024年3月6日

777 in 游戏开发

MIT授权许可

34KB
285

README

charred-path

charred-path是一个基于组件的插件,用于在2D空间中记录移动对象在指定点集中的同伦类型。

将Crate添加到Rust项目

要将此Crate添加到您的Rust项目,请将以下行添加到您的Cargo.toml文件中的[dependencies]

charred-path = "*"

"*"替换为您想要使用的Crate版本。

运行示例

此Crate包含演示如何使用PathPlugin的示例。要运行示例,请使用带有示例名称的以下命令: cargo run --example

cargo run --example homotopy_word_debug

请参考示例的源代码以获取更详细的用法说明。

API概述

要在您的Bevy项目中开始使用此Crate,请使用add_plugins方法将PathPlugin(可选地,PathDebugPlugin)添加到您的Bevy应用程序

use charred_path::{PathPlugin, PathDebugPlugin};

fn main() {
    App::new()
        // other plugins
        .add_plugins((
            PathPlugin,
            PathDebugPlugin, // the PathDebugPlugin is optional, and for debugging purposes only.
        ))
        .run();
}

PathPluginPathDebugPlugin将向您的Bevy应用程序添加系统,以记录移动对象围绕称为“穿刺点”的点集的路径。移动对象通过向实体添加PathType组件来指定,穿刺点通过向实体添加PuncturePoints组件来指定。为了正确运行,附加到它们的实体必须具有Transform组件。

游戏开发中的应用场景

charred-pathcrate最初是为平台游戏/赛博朋克风格的冒险游戏而构建的,但非常适合多种游戏开发场景。以下是一些示例

测试阶段

在测试版测试期间,了解玩家在游戏中的路径可能会有所帮助。通过记录玩家角色的路径,开发者可以深入了解玩家如何与游戏环境互动。这有助于识别游戏中未被探索的区域,或定位玩家卡住的地点。

游戏逻辑

路径记录功能还可以用于影响游戏逻辑。例如,你可以检查玩家的角色是否在某个平台之上或之下,并根据这些信息触发不同的事件。

这个库背后的数学

这个库背后的基础数学是代数拓扑,具体来说是同伦。简而言之,如果一条路径可以连续地转换成另一条路径,而不撕裂或跳过空隙,那么这两条路径被认为是同伦的。

设 $n$ 是一个自然数。$n$ 个圆的楔形(或花束)是通过在单个点上粘合 $n$ 个圆而得到的空间。这里有一个例子,展示了两个圆的楔形。在同伦等价的意义上,当平面上有 $n$ 个穿点时,这就是我们工作的空间。

在 $n$ 个圆的楔形中的环可以用特定的编码方案编码为 $n$ 个字母的单词。单词中的每个字母对应于楔形中的一个圆,字母的顺序代表在环中遍历圆的顺序。在 charred-path 中,穿点名称用于表示通过围绕它遍历而形成的圆;大写字母对应逆时针遍历,小写字母对应顺时针遍历。

为了将不同的路径识别为不同的字母串,我们将平面上的每条路径与通过它们之间直线闭合端点形成的环相对应。路径被识别为同伦等价,即同伦的一种版本,其中基准点必须保持不动。这是一个微妙的观点,有时会导致平面的环有意外复杂的单词表示,但这是区分在运动方面不同的环所必需的。这里是一个来自 homotopy_word_debug 的例子,说明了这一点

Path in the plane simply going around point D clockwise

Path in the plane going above point C, around point D clockwise, then back above point C

这两个环在(环境上)是同伦的,因为它们都是围绕 D 逆时针旋转。然而,如果环的基准点(玩家的起始位置)不允许移动,那么它们就不是同伦的。因此,它们代表了从运动路径的角度看是不同的环,并且必须以不同的方式表示。在后一张图像中,可以将玩家视为“先顺时针围绕 C,然后顺时针围绕 D,然后逆时针围绕 C。”这样做是同伦的;这就是为什么在那种情况下单词是 cdC 的原因。

为了更具体地理解这个库提供的机制,建议您尝试 homotopy_word_debug 示例。

开发路线图

截至 charred-path v0.1.0,路径被编码为分段线性路径(多段线),并且从同伦的角度自动简化。这意味着不编码玩家的完整路径。目前正在开发以下功能

  1. 启用对带有穿点的移动实体更鲁棒的处理;
  2. 允许记录移动物体的完整路径,而不仅仅是同伦的路径;
  3. 使用 serde 对路径进行序列化和反序列化实现,以便保存和加载游戏状态机制;
  4. 与物理引擎的集成,其中不可穿越的物理体带有刺穿点;
  5. 3D路径功能;
  6. 用于基于统计开发的路径分析工具。

当然,可以通过Github上的常规渠道请求任何其他所需功能/错误修复。

兼容性

以下表格列出了 charred-pathbevy 之间的版本兼容性;

Bevy charred-path
0.13 0.1.0

许可协议

本项目采用 MIT 许可协议

依赖关系

~19–46MB
~727K SLoC