#bevy-networking #bevy-replicon #client-server #networking #bevy

bevy_replicon_repair

为bevy_replicon添加客户端状态修复以实现重新连接

12个版本 (破坏性更改)

0.9.0 2024年7月4日
0.8.2 2024年5月28日
0.6.0 2024年2月23日

1189 in 游戏开发

Download history 141/week @ 2024-05-18 381/week @ 2024-05-25 194/week @ 2024-06-01 34/week @ 2024-06-08 5/week @ 2024-06-15 118/week @ 2024-06-29 86/week @ 2024-07-06 1/week @ 2024-07-13 52/week @ 2024-07-27 1/week @ 2024-08-03

53 每月下载量
bevy_replicon_attributes中使用

MIT/Apache

39KB
450

Bevy Replicon Repair

本crate扩展了bevy_replicon,添加了客户端重新连接处理,以便客户端复制状态可以在重新连接时持续存在。

如果没有这个crate,当客户端断开连接时,您需要手动清理客户端上的所有bevy_replicon复制的实体,因为这些实体将在重新连接时作为新实体复制。

重新连接处理

本crate不是重新连接处理的完整解决方案。如果客户端和服务器事件(直接消息)在断开连接时或之后发送,可能会失败。这意味着在断开连接后,任何与服务器事件(或与客户端发送事件到达服务器的预期)相关的客户端可能具有过时的状态。通常,您希望服务器向刚连接的客户端发送“初始化”消息,以传输客户端无法从复制中接收到的任何内容。

就客户端架构而言,您通常希望在等待所有初始化(或重新初始化)状态到达时将客户端置于加载屏幕中,以便用户无法与不完整的世界交互。您可以使用ServerInitTick上的更改检测来检测服务器第一条复制消息的到达,并可以手动跟踪预期初始化消息的到达。

请注意,renet不支持自动重新连接。要重新连接客户端,您需要从服务器/后端获取一个全新的连接令牌,然后重新创建renet客户端和传输资源。

使用方法

注册用于复制的组件

我们将bevy_replicon的组件注册API AppRuleExt封装在我们自己的应用扩展AppReplicationRepairExt中。

包装的API允许您定义一个自定义的'组件移除函数',该函数将在重新连接后的第一次服务器复制消息后调用客户端实体。该函数应移除在重新连接后未能复制的任何复制注册的组件。我们提供了一个默认函数 repair_component,其行为符合您的预期。

以下是使用默认组件注册的示例

#[derive(Component)]
struct Health(usize);

fn setup_replication(app: &mut App)
{
    // bevy_replicon equivalent: `app.replicate::<Health>();`
    app.replicate_repair::<Health>();
}

请注意,如果您已经使用 bevy_replicon 的API注册了组件,您可以使用 add_replication_repair_fn 添加复制修复。

如果存在 ParentSyncPlugin,则默认注册 bevy_replicon 组件 ParentSync 进行修复。

客户端

客户端必须包含 ClientPlugin

客户端插件包括一个 cleanup_prespawns 选项,用于 bevy_replicon 的客户端实体预映射功能的使用者。有关更多详细信息,请参阅文档

fn setup_client(app: &mut App)
{
    setup_replication(app);  //replicate Health
    app.insert_plugins(ClientPlugin{ cleanup_prespawns: true });
}

服务器

服务器必须包含 ServerPlugin

fn setup_server(app: &mut App)
{
    setup_replication(app);  //replicate Health
    app.insert_plugins(ServerPlugin);
}

bevy_replicon 兼容性

bevy_replicon bevy_replicon_repair
0.27 0.9 - master
0.26 0.8
0.25 0.7
0.23 0.5
0.21 0.4
0.19 0.1 - 0.3

依赖关系

~40–78MB
~1.5M SLoC