写 Unity 的 C#,在 VRChat 里运行。
Udonite 把普通的 Unity C# 编译成 VRChat 世界所用的 Udon。没有需要另学的方言,也没有禁用关键字清单 —— 你已经在写的代码可以原样在世界中运行。世界本身做不到的部分,由托管服务来补足。
按下、同步、显示
一个任何人都能按的按钮,一个所有玩家都看到的计数,一个跟着它变化的标签。没有 sync 属性,没有序列化调用,没有方言。教程会从空项目开始,大约十五分钟做出它。
Interact在玩家按下物体时运行。Synced<int>是每个客户端都持有的计数。写入 .Value 就会复制,后加入的玩家也会收到当前值。Subscribe在值到达时于每个客户端运行,所以标签只在一处更新。
获取编译器
免费,而且会一直免费。把这个列表粘贴到 VRChat Creator Companion,然后从包列表中添加 Udonite。
https://udonite.github.io/vpm/index.json
添加到 VCC编译器
输入 C#,输出 Udon。泛型、接口等特性是被编译的,而不是被重新实现的,所以写法和任何 Unity 项目一样。
托管服务
从世界向 Discord 或你的手机发送消息,并保存计数器、成绩表或共享开关 —— 即使所有人都离开也不会丢失。
包
放进世界里就能用的库。每一个都把 Udon 里一处不容易写对的地方,变回普通的 C#。
绑定
不在 Inspector 里连任何线,也能知道玩家动了控件。
阅读文档 →日志
会自报家门的日志:哪个 behaviour、哪个方法、第几行。上传之后照样能用。
阅读文档 →网络
会告诉你何时变化的同步值,以及谁都能发送的带类型消息,场景里不用准备任何东西。
阅读文档 →Observables
一个会在自己改变时通知订阅者的值,让分数和显示它的一切保持同步,而不需要一份要手动去戳的清单。
阅读文档 →持久化
保存玩家的进度,用两个动词而不是十六种方法,时机上的坑也替你处理好了。
阅读文档 →序列化
把数据打包成字节,或者打包成 JSON——两者都是薄薄地包了一层 Udon 本来就有的东西,而不是重新造一遍。
阅读文档 →常见问题
- Udonite 是什么?
- Udonite 是一个把普通 Unity C# 编译成 Udon(VRChat 世界的脚本运行时)的编译器,并附带一组包和托管服务。你像在任何 Unity 项目里一样编写 MonoBehaviour,保存时 Udonite 就会把它编译成 Udon 程序。详情见编译器文档。
- Udonite 和 UdonSharp 有什么不同?
- UdonSharp 是一种方言:带有自己规则和禁用功能清单的 C# 子集。Udonite 直接编译你已经在写的 C#,包括泛型、接口、LINQ、async 和 record,只拒绝 Udon 本身做不到的事,并且逐项给出诊断代码和改写建议。UdonSharp 的行为脚本在同一个项目里照常工作。语言支持列出了能编译的内容。
- Udonite 免费吗?
- 编译器和包是免费的,而且会一直免费。托管服务有足够用于开发的免费额度,支持者可以获得更高的上限。
- 如何安装 Udonite?
- 用上面的按钮把 Udonite 的仓库列表添加到 VRChat Creator Companion,然后把包加入你的世界项目。你的第一个世界一步步带你完成,快速开始是简短版。
- Udonite 支持哪些 Unity 和 VRChat SDK 版本?
- VRChat 当前为世界所支持的版本:今天是 Unity 2022.3 和 Worlds SDK 3.10 或更新版本。VRChat 会持续记录当前 Unity 版本和 SDK,Udonite 跟随它们。
- 托管服务能做什么?
- Relay 把消息从世界发送到 Discord Webhook 或你的手机。Storage 保存计数器、成绩表和共享开关,即使所有人都离开也不会丢失。两者都在控制台中管理,并通过 Net 和 Persistence 包从世界中使用。