7个版本 (破坏性更新)
0.7.0 | 2024年5月11日 |
---|---|
0.6.0 | 2023年3月7日 |
0.5.0 | 2022年11月17日 |
0.4.0 | 2022年10月16日 |
0.1.0 | 2022年5月29日 |
#588 in 网络编程
每月60次下载
33KB
255 行
bevy_rosc
使用rosc在bevy中发送和接收OSC 1.0消息。
用法
要快速开始,只需将插件添加到您的应用程序中
use bevy::prelude::*;
use bevy_rosc::OscMethod;
use bevy_rosc::{BevyRoscPlugin, SingleAddressOscMethod};
fn main() {
App::new()
// Minimal Bevy plugins
.add_plugins(MinimalPlugins)
// Add the bevy_rosc plugin and have it listen on port 31337
.add_plugins(BevyRoscPlugin::new("0.0.0.0:31337").unwrap())
.run();
}
现在您可以将SingleAddressOscMethod
或MultiAddressOscMethod
添加到您的实体中。
OSC方法是具有一个或多个OSC地址的组件,可以接收具有匹配地址模式的OSC消息。
fn spawn_entity(mut commands: Commands) {
commands.
spawn(
SingleAddressOscMethod::new(vec!["/some/osc/address".into()]).unwrap()
);
}
然后您可以从组件中开始检索OSC消息!
/// System that listens for any `SingleAddressOscMethod` that has changed and prints received message
fn print_received_osc_packets(
mut query: Query<&mut SingleAddressOscMethod, Changed<SingleAddressOscMethod>>,
) {
for mut osc_receiver in query.iter_mut() {
let new_msg = osc_receiver.get_message(); // Gets the oldest received message, or `None` if there are no more left
if let Some(msg) = new_msg { println!("Method {:?} received: {:?}", osc_receiver.get_addresses(), msg) }
}
}
有关完整示例,请参阅examples/plugin.rs
如果您想将OSC消息直接接收至自定义组件,请参阅examples/custom_osc_method.rs
数据流
graph TD;
server1[UDP Server 1] --> dispatcher
server2[UDP Server 2] --> dispatcher
serverdot[...] --> dispatcher
server3[Any other source] --> dispatcher
dispatcher -- Write --> OscDispatchEvent{{OscDispatchEvent}}
OscDispatchEvent -. Read .-> system1["method_dispatcher_system::<SingleAddressOscMethod>"]
OscDispatchEvent -. Read ..-> system2["method_dispatcher_system::<MultiAddressOscMethod>"]
OscDispatchEvent -. Read ...-> system3["method_dispatcher_system::<MyOscMethod>"]
system1 -- Match & Receive --> comp1[(SingleAddressOscMethod)]
system2 -- Match & Receive --> comp2[(MultiAddressOscMethod)]
system3 -- Match & Receive --> comp3[(MyOscMethod)]
任何通过任何方式(通常是通过UDP服务器)接收到的OSC数据包都会发送到调度器。它解包OSC数据包,从中检索所有消息,并写入包含它们的OscDispatchEvent
。从那里,方法调度器系统(每个OscMethod
-组件一个)读取事件并遍历所有OSC方法组件。如果组件的地址与消息的地址模式匹配,则消息会被组件接收。
默认的OSC方法SingleAddressOscMethod
和MultiAddressOscMethod
会将接收到的消息存储在向量中,您必须从中检索它们才能对其进行操作。但是,您的自定义OSC组件可以直接对接收到的消息进行操作。
Bevy兼容性
bevy | bevy_rosc |
---|---|
0.13 | 0.7 |
0.10 | 0.6 |
0.9 | 0.5 |
0.8 | 0.4 |
0.7 | 0.1 |
依赖项
~20–47MB
~744K SLoC