Skip to main content

UdonSharp 的前世今生

你好,来自现实的旅人 ${ LocalPlayer.displayName }

欢迎来到 UdonSharp 的世界。

// 此处应该有饱含人文关怀的序以安抚被 UdonSharp 伤透了心的可怜新手开发者

前情提要:VRCSDK 2.0 

// 此处应有 SDK 2.0 和社区继承者 CyanTrigger; 另外其实我是在玩 EVE 的梗

Udon乌冬面 的诞生

VRCSDK 3.0 刚刚发布时,取代 VRCSDK 2.0 的并不是 UdonSharp,而是一种被称为 Udon Node Graph 的可视化图形编程语言。Udon Node Graph 需要被被编译为 Udon VM 字节码 才能在 VRChat 世界中运行。

为什么不直接允许用户编写任意 Unity C# 脚本,而是将用户代码放在 Udon VM 中运行?VRChat 的每个世界都由用户创建并上传,如果允许运行任意 Unity C# 代码,可能会有人上传恶意代码破坏你的 VRChat 客户端或破坏你的电脑。因此,用户创建的代码必须通过检查并保证不包含恶意功能,或隔离在单独的运行环境让它无法影响外界。

就像浏览器中的 JavaScript 运行在隔离沙盒中一样,将不可信代码隔离在虚拟机或沙盒中运行保证宿主安全是常用的安全策略。VRChat 选择的技术路线是将用户代码运行在自定义的字节码解释器中,并且将外部函数调用限制在白名单中。

VRChat 社区里长出来的 UdonSharp

显然,Udon Node Graph 是无法满足开发者对于组织复杂代码、复杂工程的需求的,Udon Node Graph 也无法像常规文本脚本一样被简单复用。但好消息是,VRCSDK 并没有限制开发者自行实现新的编译器并生成 Udon VM 字节码。因此,UdonSharp (后文称 U#)这一社区项目诞生了。U# 允许用户使用 C# 的语法功能子集编写脚本,然后被 Udon VM 执行。抛开 Udon VM 的糟糕性能不谈,U# 大幅提高了开发者的开发效率,很快也被 VRChat 吸收作为官方项目。

作为背景介绍的一部分,尽管 VRChat 宣传“Udon Node Graph 适合编程新手”,但很多开发者并不认同这一说法。主要的原因是,Udon Node Graph 没有简化编程,反而让简单的编程概念变得更复杂:用户不得不需要具有编程的大部分先验知识才能在 Udon Node Graph 用简陋的工具“带着脚镣跳舞”。这也导致了 Udon Node Graph 使用率异常的低,当编程新手想在社区里获得帮助时,往往会意外的发现,几乎所有资深开发者都不了解 Udon Node Graph,而这反过来又降低了 Udon Node Graph 的使用率。