【無料】TsukimiSharp(T#):Udon向け言語・最適化コンパイラ・静的解析MCP
상품 설명
TsukimiSharp(T#)は、VRChatのUdon向けの言語・C#コンパイラです。
UdonSharpより広いC#の機能をサポートします。
VCC/ALCOM用VPM URL:https://zz-roba.github.io/tsukimi-vpm/index.json
リファレンス:https://tsukimi-reference.pages.dev
更新履歴:https://github.com/zz-roba/tsukimi-vpm/releases
Discordサーバ:https://discord.gg/pvd8m2PwC
■ できること
・UdonSharpの(おおよそ)スーパーセットなUdon向けのC#のサブセット言語で、Udon(VRChatワールドのプログラム)を記述できます。
・interfaceやジェネリクスなど、より広いC#の機能に対応(書ける形と書けない形の一覧は同梱のドキュメントにあります)
・値の変化に合わせて処理が走る書き方に対応。追いたい値と、そこから導かれる値と、変わったときに走らせる処理を属性で書けます(サンプルを同梱)
・テストを書けます。属性を付けたメソッドをエディタの窓から実行して、通ったか落ちたかを一覧で見られます(Unityを再生せずに実行します)
・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値として使用など細かい条件があります)。
新しめのC#の書き方も使えます
・多次元配列(int[4,4]のように確保して、そのまま添字で読み書きできます)
・末尾からの添字と範囲切り出し(a[^1]で最後の要素、a[1..]で途中から先)
・タプル((a,b)=(c,d)の代入、(a,b)==(c,d)の比較、タプルの配列、foreachでの分解)
・switch式のwhen句と非定数パターン(値でも範囲でも書き分けられます)
・switch文のcase(範囲、andやorの組み合わせ、型パターン、when句)
・名前付き引数と、既定値のある引数の省略
・is型テスト(objectに入れた値をbool/int/float/stringといった型で見分けられます)
・ローカル関数(外のローカル変数を読めます)
・ジェネリック基底(class Leaf : Base<int>のように、継承した時点で型が決まる形)
・structやrecordの計算するプロパティ
■ Udonの仕様による制約
・データのまとまりはclassではなくstructまたはrecordで書いてください。TsukimiBehaviourを継承したクラスと、そのイベント(Interact/Update/Start等)のoverrideはこれまでどおり使えますが、ユーザー定義クラスどうしの継承やvirtual/overrideには対応していません(U#と同じ)。
・Udonの制約に合わせたC#のサブセットです。C#のすべての構文には対応していません。現在使えない主なもの:例外(throw/try-catch/finally)、usingブロック(usingステートメント)、lock、ラムダや匿名関数、デリゲート、イベント(event)、async/await、goto、配列と文字列とTransformの子以外のforeach、ユーザー定義クラスのnew。ファイル冒頭の名前空間の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に取り込まれます。書き方を1つずつ見せるサンプル集(22本)が1つ入っていて、シーンが2つ付いています。開いてPlayしてください。
・書いたテストは、メニューのTsukimiCode>Tsukimi Testsを開いて実行します。
■ 動作環境
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を通じて動作します。
모든 리뷰
더보기리뷰 등록
리뷰를 작성하려면 로그인이 필요합니다.
로그인하고 리뷰 쓰기