5 个版本
0.6.0 | 2021 年 6 月 10 日 |
---|---|
0.5.2 | 2021 年 4 月 12 日 |
0.5.1 | 2021 年 4 月 11 日 |
0.5.0 | 2021 年 4 月 11 日 |
0.5.0-pre1 | 2021 年 4 月 9 日 |
#1420 in 游戏开发
42 每月下载量
48KB
877 行
Bevy 的 Spicy Networking
bevy_spicy_networking
是解决您 bevy 游戏中“如何将多个客户端连接到单个服务器”问题的方案。
使用 tokio 作为异步后端,它完全集成到 bevy 中,允许您快速将网络添加到游戏中。只需添加服务器/客户端插件,注册您计划接收的消息类型,并将它们作为事件监听即可!
它旨在作为网络统一包。其他包可以通过注册它们自己的消息来扩展您的游戏。这是通过惊人的 typetag
包实现的。
内容
文档
您可以查看 在线文档,或者通过克隆此仓库并运行 cargo doc -p bevy_spicy_networking
来构建它。
对于示例,请查看 示例目录。
- 在
server.rs
中,您将找到一个简单的聊天服务器,它会广播从客户端接收到的消息 - 在
client.rs
中,您将找到一个简单的图形聊天客户端,您可以通过它连接到服务器并发送消息
(注意:由于 bevy 不包含文本输入小部件,这是一个非常简化的演示。一旦 bevy 的 UI 部分更完整,这将很容易扩展。)
快速入门
- 将
bevy_spicy_networking
、serde_derive
和typetag
添加到您的Cargo.toml
- 创建您希望客户端和服务器之间交换的消息,或反之。
- 在它上面实现 Serde 的 Serialize 和 Deserialize
- 实现
NetworkMessage
,并确保使用typetag::serde
进行注释 - 当从客户端发送到服务器时,实现
ServerMessage
- 当从服务器发送到客户端时,实现
ClientMessage
#[derive(Serialize, Deserialize)]
struct WhisperMessage {
recipient: UserId,
message: String,
}
#[typetag::serde]
impl NetworkMessage for WhisperMessage {}
// In this case, its a client sending a message to a server
impl ServerMessage for WhisperMessage {
const NAME: &'static str = "example:WhisperMessage"; // This name needs to be unique!
// Otherwise, the recipient will mix up the messages
}
- 在接收方,注册要接收的类型
use bevy_spicy_networking::AppNetworkServerMessage;
let appbuilder: &mut AppBuilder = /* Get an AppBuilder, which is returned by bevy from App::build() */;
// Now whenever a client sends a `WhisperMessage` the server will generate an event of
// `NetworkData<WhisperMessage>` which your application can then handle
appbuilder.listen_for_server_message::<WhisperMessage>();
- 监听该类型的事件
fn handle_incoming_whisper_messages(
mut whisper_messages: EventReader<NetworkMessage<WhisperMessage>>,
) {
for whisper_message in whisper_messages.iter() {
// Handle the whisper
}
}
- 在您的游戏中享受简单且🌶️的联网!
Bevy 版本兼容性
简单地选择与您的 bevy 版本兼容的版本
Bevy Spicy Networking | Bevy |
---|---|
0.6 | 0.5 |
与最新 bevy 版本不兼容的任何版本都处于维护模式。它将只接收我或社区提供的少量错误修复。
支持的平台
目前仅正式支持 Linux 和 Windows,我不明白为什么 MacOS 不会,但我没有 Mac 进行测试。如果您有 Mac,并希望测试它并反馈,请告诉我!
路线图
目前 bevy_spicy_networking
仅使用 TCP。这将在某个时候改变,单个消息将能够指定它们应该如何传递。此更改将是兼容的,或者只需要进行少量更改。
使用 bevy_spicy_networking
的包
目前没有,您可以通过发送 PR 并将其添加到下面的表格中来帮助扩展此列表!
名称 | 版本 |
---|---|
- | - |
贡献
要贡献力量,请简单地分叉存储库并发送 PR。如果您有任何问题或建议,请随时在 bevy discord 上的 @Hemera#0001
聊天。
依赖关系
~18–30MB
~487K SLoC