【無料】TsukimiSharp(T#):Udon向け言語・最適化コンパイラ・静的解析MCP
- 通常版Digital0 JPY
- 月見うどん代(投げ銭用)Digital500 JPY



TsukimiSharp(T#)は、VRChatのUdon向けの言語・C#コンパイラです。 UdonSharpより広いC#の機能をサポートします。 VCC/ALCOM用VPM URL:https://zz-roba.github.io/tsukimi-vpm/index.json 更新履歴:https://github.com/zz-roba/tsukimi-vpm/releases Discordサーバ:https://discord.gg/pvd8m2PwC ■ できること ・UdonSharpの(おおよそ)スーパーセットなUdon向けのC#のサブセット言語で、Udon(VRChatワールドのプログラム)を記述できます。 ・interfaceやジェネリクスなど、より広いC#の機能に対応(対応範囲は同梱ドキュメントを参照) ・GPUで走る処理をC#で書けます。属性を付けたメソッドがシェーダへ翻訳され、結果をテクスチャとして受け取れます(水面のサンプルを同梱) ・最適化コンパイラを同梱。型やジェネリクスなど抽象化のコストを削ります(定数畳み込み・共通部分式除去・ループ最適化(LICM/展開)・インライン化・デッドストア除去など)。壊れないことを最優先にした、そこそこの最適化です(変換の前後で挙動が一致することを確認できたものだけ適用) ・AI向けの静的解析(MCP)を同梱(任意・実験的) ・配布するアセットに同梱可能です。 ■ 対応している機能 UdonSharpで書けるものは、大体そのまま書けて、加えてUdonSharpにない機能も使えます。対応範囲の詳細はドキュメントを作成中です。 T#にあって、U#にない機能 ・ユーザー定義interface(宣言・実装・型制約による静的ディスパッチ) ・タグ付きunion(interfaceの実行時多相とADTを型パターンswitchで分岐・網羅性チェック付き) ・switchの網羅性チェック(unionやenumで未処理のcaseをコンパイルエラーにする) ・recordの生成メンバ(with式・値ベースのEquals/==・分解) ・ジェネリクスの単相化(型引数を持つメソッドや型を使用箇所ごとに静的展開) ・structへのメソッド・演算子の定義 ・null安全(nullable enableで未ガードの参照外しをコンパイルエラーに昇格) ・GPUで解く処理の記述(カーネルをC#で書いてシェーダへ翻訳) いずれもUdon VMの制約内での対応です(非再帰のunionのみ、interfaceは型制約やunion値として使用など細かい条件があります)。 対応範囲の詳細はドキュメントを作成中です。 ■ Udonの仕様による制約 ・データのまとまりはclassではなくstructまたはrecordで書いてください。TsukimiBehaviourを継承したクラスと、そのイベント(Interact/Update/Start等)のoverrideはこれまでどおり使えますが、ユーザー定義クラスどうしの継承やvirtual/overrideには対応していません(U#と同じ)。 ・Udonの制約に合わせたC#のサブセットです。C#のすべての構文には対応していません。現在使えない主なもの:例外(throw/try-catch/finally)、usingブロック(usingステートメント)、lock、ラムダや匿名関数、ローカル関数、デリゲート、async/await、goto、配列以外のforeach。ファイル冒頭の名前空間のusing(usingディレクティブ)はこれまでどおり使えます。使えないものはUdonSharpでも同様に使えないものが中心です。対応範囲の詳細はドキュメントを作成中です。 ■ 導入方法 ・VCCまたはALCOMを使う場合は、上の「VCC/ALCOM用VPM URL」のURLを追加してください。パッケージ一覧からTsukimiCode Udon Toolsを導入できます。 ・BOOTHの配布ファイルから入れる場合は、まずzipを展開してください。配布ファイルが.tgz.zipなのは、BOOTHにアップロードできる拡張子の都合でzipに包んでいるためです。 ・展開して出てくるtarball(.tgz)を、UnityのPackage Manager(Window>Package Managerを選択)で「Add package from tarball」を選んで追加してください。このボタンはUnityのPackage Managerにあるもので、VCCとALCOMにはありません。 ・T#のスクリプトの作成は導入後、Projectビュー(ファイルとかがあるところ)右クリックして、Create>T# Scriptから作成できます。 ・メニューのTsukimiCode>Import Samplesを押すと、同梱サンプルがAssetsに取り込まれます。フォルダごとに同じ名前のシーンが入っているので、開いてPlayしてください。床が光るものと、書き方を1つずつ見せる見本市の2つが入っています。 ■ 動作環境 VRChat Worlds SDK(Udon)が入ったUnityプロジェクト。UdonSharpと同じ用途で使えます。 ■ 価格について 本体は無料でダウンロードできます。「月見うどん代(投げ銭)」は応援したい方向けの任意の投げ銭です。購入しなくても機能に差はありません。 ■ 利用規約 ・本ソフトウェアは現状有姿で提供します。動作・品質・特定目的への適合性について、明示黙示を問わずいかなる保証もしません。 ・本ソフトウェアの利用、または利用できないことから生じたいかなる損害についても、作者は責任を負いません。利用は自己責任でお願いします。 ・本ソフトウェアはVRChat社およびUnity Technologies社とは無関係の非公式ツールです(名称は識別のために使用しています)。 ・本ソフトウェアで作成した成果物(ワールド等)は、商用非商用を問わず自由にご利用いただけます。 ・違法な用途、およびVRChat等の各種利用規約に反する用途には使用しないでください。 ・デジタル商品の性質上、購入後の返金はできません。「月見うどん代」は任意の投げ銭であり、機能や対価ではありません。 ・本規約は予告なく変更することがあります。 ■第三者ソフトウェアのライセンス表記 本製品は以下の第三者ソフトウェアを利用しています。各ライセンスの条項に従います。 ・Microsoft.CodeAnalysis(Roslyn):C#の構文・意味解析に利用しています。MIT License(Copyright © .NET Foundation and Contributors)。 ・UdonSharp(U#):互換性検証のためのテストコーパスとして利用しています。MIT License(Copyright © Merlin, UdonSharp contributors)。 ・VRChat Worlds SDK(Udon):本製品には同梱せず、ユーザー環境のSDKを通じて動作します。



