更新情報
2025年06月21日: UdonSharpに関する情報など、一部情報を更新
2023年09月18日: UdonSharp 1.x系への言及など、一部情報を更新
2022年02月14日: 投稿
大雑把に言うと
VRChatのSDK3で追加された、ギミック作成のための仕組みです。
SDK3でのワールドギミックの殆どはUdonで作られていると思って問題ないでしょう。
もう少し詳しく
Udonはプログラミング言語で、作った処理をGameObjectに付けて動作させることが出来ます。
有名な作成方法は幾つかあり、
-
UdonGraph
SDK3に備え付けの方法です。
任天堂の「はじめてゲームプログラミング」みたいな感じで、処理・データ同士を線で繋いで作ります。
こちらで作ってみたい方は、私の入門記事が参考になるかもしれません。サンプルはBoothにも無料で配布しています。
【VRChat】Udon Graph 入門【SDK3】 -
UdonSharp
別途アセットを導入することで使える方法です。(SDK3.4.0からはSDK側に1.x系が統合されるという話があります)
SDK 3.4.0から標準で同梱されている方法です。
テキストベースでUdonの処理が書けるため、プログラミングに馴染みのある方はこちらを好む傾向にあると思います。
VCC以前で利用されていたのは0.x系、VCC/ALCOM経由で導入可能なもの(及びSDKに同梱されているもの)は1.x系であり、互換性があまり無いため注意が必要です。(自動変換は付いていますが、上手く変換されずに壊れることがあります)
VCC/ALCOMから導入出来るSDKをご利用の場合、旧バージョン(0.x系)のUdonSharpを導入する必要はありません。(むしろ、そうするとエラーが出てしまうため、導入しないでください。)
旧リンク: https://github.com/MerlinVR/UdonSharp/
新リンク: https://github.com/vrchat-community/UdonSharp/
などがあります。
更に詳しく
「Udon」と一口に言っても、文脈によって意味合いが少し異なります。
そのため、ここまでに出した単語についても改めて記述したいと思います。
"Udon"とUdon VMについて
一般に"Udon"というと"SDK3でのワールドギミック作成手段"のことを指しますが、厳密には、UdonはUdonAssembly(後述)から生成されたバイトコードを実行するVMであり、文脈によってはこちらを指す場合があります。
UdonGraphもUdonSharpも、実際には全てUdonAssemblyに変換(コンパイル)され、実行されています。
そのため、UdonAssemblyやVM用のバイトコードに変換する機構(Unityエディタ拡張)を作成することで、自由に言語を作ることが出来ます。
実際に、UdonSharp以外にもUdonを扱う方法を有志が作成しており、例えばCyanTriggerなどがあります。(ただし、CyanTriggerは将来的な開発終了が宣言されています。)
なお、私が知っているUdon VMに関する重要な仕様として、UdonGraphでは変数512個分しかヒープ領域が用意されていない、というものがあります。
(UdonSharpやCyanTriggerなどではヒープ領域の大きさをコンパイル時に決定しているようです。)
他にも色々あるかもしれません。
UdonAssemblyについて
UdonAssemblyはアセンブリ言語のようなプログラミング言語です。
Udon VMで実行するためのバイトコードに対応しているため、自作コンパイラはバイトコードを直接生成せずにUdonAssemblyを中継することが出来ます。
UdonGraphについて
UdonGraphは公式が提供するノード型のビジュアルプログラミング言語です。
VRChatが用意したAPIやUnity/C#のメソッド等をノードで扱います。
複雑なものを作ると、ノードを置くたびに数秒待たされることになったりするため、本格的なものを作るにはあまり向いていない面もあります。
UdonSharpについて
UdonSharpはMerlin氏が作成した、C#風に記述できるプログラミング言語です。
Udonの仕様上、本来のC#ほど自由には記述出来ませんが、それでも非常に有用です。
複雑なものを作るための方法として選ぶ人は多いです。