#vr-chat #input-file #udon

bin+lib wasm2usharp

将 WebAssembly 转换为 UdonSharp 的工具

1 个不稳定版本

0.1.0 2024 年 6 月 5 日

#292 in WebAssembly

MIT/Apache

525KB
5K SLoC

wasm2usharp

这里也有日语版本

将 WebAssembly 转换为 UdonSharp 的工具

安装

您可以从 发行版 页面下载预构建的二进制文件。

如果您使用 Cargo,您可以从 Cargo 安装。

cargo install wasm2usharp

使用方法

Usage: wasm2usharp [OPTIONS] [INPUT]

Arguments:
  [INPUT]  Input file. If not provided or if this is `-` then stdin is used

Options:
  -o <OUTPUT>      Where to place output. If not provided then stdout is used
      --test       Convert to C# instead of UdonSharp for testing
  -h, --help       Print help
  -V, --version    Print version

有关在 VRChat 项目中使用示例的说明,请参阅 示例

  • 在 U# 中,您需要首先调用 w2us_init 方法进行初始化
  • Wasm 导出的全局变量、内存和表成为 U# 中的公共字段,Wasm 导出的函数成为 U# 中的公共方法
  • Wasm 中的导入创建 U# 中每个模块名的公共字段类型 class_module_name,并且在转换后的代码中使用 module_name.import_name 访问它们
  • Wasm 中的标识符 _start 在转换为 U# 后将被替换为 w2us_start。这是为了防止意外调用名为 _start 的函数,该函数是 WASI 的入口点,因为它在 Udon 中被视为 Start 事件函数。
  • 在 Wasm 内部完成的函数的递归调用被正确处理,但如果函数通过从 Wasm 调用外部函数然后从外部再次调用 Wasm 函数进行递归调用,则递归调用的函数的局部变量值可能不正确
  • Wasm 中的整数类型对应于 U# 中的有符号整数类型
  • 如果命令中指定了输出文件名,则文件名(减去扩展名)是 U# 中的类名
  • 在 Wasm 的导出/导入名称中,非字母数字字符被替换为 _,如果第一个字母是数字或与 C# 关键字同名,则前面加 _

支持的 Wasm 建议

  • 可变全局变量的导入/导出
  • 非捕获浮点数到整数的转换
  • 符号扩展运算符
  • 批量内存操作(仅支持 memory.copymemory.fill 指令)

日语

从 WebAssembly 转换到 UdonSharp 的工具

安装

您可以从 发行版 页面下载预构建的二进制文件。

如果您使用 Cargo,您可以从 Cargo 安装。

cargo install wasm2usharp

使用方法

Usage: wasm2usharp [OPTIONS] [INPUT]

Arguments:
  [INPUT]  入力ファイル。指定されない、または`-`の場合は標準入力が使用される

Options:
  -o <OUTPUT>      出力先の場所。指定されない場合は標準出力が使用される
      --test       テストのためにUdonSharpの代わりにC#へと変換する
  -h, --help       ヘルプを出力
  -V, --version    バージョンを出力

有关在 VRChat 项目中使用示例的说明,请参阅 示例

  • 在 U# 中,您需要首先调用 w2us_init 方法进行初始化
  • Wasm 导出的全局变量、内存和表成为 U# 中的公共字段,Wasm 导出的函数成为 U# 中的公共方法
  • 在Wasm中的导入,U#中将创建名为class_模块名类型的public字段,并在转换后的代码中通过模块名.导入名进行访问。
  • Wasm中的_start标识符在转换为U#后将替换为w2us_start。这是因为WASI的入口点名为_start的函数在Udon中被视为Start事件函数,因此为了避免意外调用,进行了替换。
  • 函数的递归调用:Wasm内部完成的递归调用可以正确处理,但如果从Wasm调用外部函数,然后从外部再次调用Wasm函数以实现递归调用,则递归调用的函数的局部变量值可能不会正确。
  • Wasm中的整数类型与U#中的符号整数类型相对应。
  • 如果通过命令指定输出文件名,则除扩展名外的文件名将成为U#的类名。
  • Wasm的导出和导入名称,除英文字母和数字以外的字符将被替换为_,如果名称以数字开头或与C#的关键字相同,则名称前将附加_

支持的Wasm提案

  • 可变全局变量的导入/导出
  • 非捕获浮点数到整数的转换
  • 符号扩展运算符
  • 仅支持批量内存操作(memory.copy命令和memory.fill命令)

依赖项

~8.5MB
~150K SLoC