Closed7

Godot C# の Web 版に関して

Lemon73Lemon73

現在、 Godot C# (4.2) は Web 版に対応していない。
3.x 系では対応していたのに、なぜ 4.x 系ではサポートされていないか。また今後の方針に関して記載する。

(間違えがあれば、コメントで指摘してほしい)

Lemon73Lemon73

まずはじめに Godot は C# に対応しており、現在 (4.2) 対応しているプラットフォームは以下である。

プラットフォーム ランタイム サポート .NET バージョンの最小要件
Windows CoreCLR, Mono, NativeAOT 6.0 (CoreCLR), 7.0 (Mono, NativeAOT)
macOS CoreCLR, Mono, NativeAOT 6.0 (CoreCLR), 7.0 (Mono, NativeAOT)
Linux CoreCLR, Mono, NativeAOT 6.0 (CoreCLR), 7.0 (Mono, NativeAOT)
Android Mono 7.0
iOS NativeAOT 8.0
Web - -

3.x 系ではすべてサポートされているが、 4.x 系に以降したときに Desktop 以外のサポートがなくなった。 Android と iOS は 4.2 で実験的機能[1]として追加された。 (本題から逸れるため、詳細は記載しない)
Web も 3.x 系では利用可能だったが、 4.x 系では未だ利用ができない状況である。

脚注
  1. https://godotengine.org/article/platform-state-in-csharp-for-godot-4-2/#web:~:text=mobile platforms is still experimental ↩︎

Lemon73Lemon73

さて、そろそろ本題とする。

Godot では C# 以外のプロジェクトでは Emscripten を利用し、 C++ のコードを Web Assembly (wasm) に変換することによってブラウザ上で動作させている。

C# は言わずもがな Web Assembly に対応している言語であり、代表的なソリューションとして Blazor wasm が挙げられる。しかし、現在の C# wasm のランタイムは動的リンクに非対応であり、これが原因で動作していない。この issue の Milestone は .NET 9.0 に設定されており、これが先述の .NET 9.0 のリリース以降にサポートされるだろう という結論に結びつく。履歴を見てみると、もともとは .NET 8.0 に設定されていたようだが、延期になったようだ。 (Blazor Static-SSR が実装された代わりに、これとか、 マルチスレッド対応とかが延期されたのかな)この issue の close 後に、 Godot の開発者が dotnet9-preview 版を利用して開発を進めたら、 .NET 9.0 のリリースとほぼ同時に Web 版が使えるようになるかもしれない。 (私の予想では .NET 9.0 リリース後の1-4ヶ月くらいはかかると思うが)

Lemon73Lemon73

追記 (2024/8/4)

Blazor のマルチスレッド対応が気になっている。 (.NET 10 に延期したんだ…。履歴を見る感じ5年くらい延期してる?)

いくつか issue があって、終わっているのもあるっぽい (内容はほぼ読んでないから、違いはわからないけど)

現状、終わっていないのは下の2つの issue のみ。ほとんどの作業は .NET 9 で解決したみたい (すごいね)

このスクラップは5ヶ月前にクローズされました