OSC DIY
欢迎您制作自己的,通过 OSC 与 VRChat 通信的程序。这需要一定的编程知识或学习--其并不复杂,但需要处理网络连接和异步消息传递,因此不太适合作为初上手的编程项目。
我们目前有两个 API 可用于交互:输入和形象参数。OSC 文档中的诸多页面将介绍可发送和接收的信息以及其他一些细节。
OSC 信息
OSC 信息主要由两部分组成--地址和值。地址以斜线作为分割符,类似:/fridge/door/butter
。地址总是以斜线开头,用斜线来分隔不同类别的内容。而OSC信息的值,从技术上讲,可以是任何支持类型的任意组合 —— 因此可以它是单个字符串,也可以是 3 个浮点数,或者一个布尔值,或者是一种颜色,也可以是二进制 blob。但是,为了提高性能,我们使用的库牺牲了这种自由性。所以我们目前支持 int
、float
和 bool
这三种类型的形象参数值,并可根据需要添加其他值。
OSC 消息传送以单向单连接的方式进行。其中有一个发送方和一个接收方。接收方监听指定端口,发送方则只向该端口发送 UDP 信息,不会检查这个端口是否被监听。您可以先启动发送方,也可以先启动接收方,不用但心启动顺序,因为这个过程中不存在协议握手。
OSC 库
几乎所有编程语言都能实现 OSC。
对于 C#,我们在 VRChat 客户端中使用OscCore 的这一分支。在我们发现的所有 C# 库中,它的性能最好,内存占用最少。
如果您使用的是 Python,可以参考python-osc,我们在一些内部测试中使用了它,没有出现任何问题。
您不喜欢这些编程语言,或者喜欢其他语言?那么OSC 主页的这一页有一份很棒的库列表。
异步问题
由于 OSC 是一种网络协议,因此许多实现都是在后台线程上发送和/或接收数据。在 Unity 项目中,这意味着您需要存储这些数据,然后在主线程的下一帧更新时应用这些数据。每个库的处理方式都略有不同,如果您在接收数据和可视化数据方面遇到问题,可以从这里入手。