【VRChat】Udonって何?


大雑把に言うと

VRChatのSDK3で追加された、ギミック作成のための仕組みです。
SDK3でのワールドギミックの殆どはUdonで作られていると思って問題ないでしょう。

もう少し詳しく

Udonはプログラミング言語で、作った処理をGameObjectに付けて動作させることが出来ます。
有名な作成方法は幾つかあり、

  • Udon Graph
    SDK3に備え付けの方法です。
    任天堂の「はじめてゲームプログラミング」みたいな感じで、処理・データ同士を線で繋いで作ります。
    こちらで作ってみたい方は、私の入門記事が参考になるかもしれません。サンプルはBoothにも無料で配布しています。
    【VRChat】Udon Graph 入門【SDK3】

  • Udon Sharp
    有志によって作成・配布されているアセットを導入することで使える方法です。
    テキストベースでUdonの処理が書けます。
    最近作者の方がVRChat社に入社したらしく、最新版の配布URLが変わるかもしれません。
    旧リンク: https://github.com/MerlinVR/UdonSharp/
    新リンク: https://github.com/vrchat-community/UdonSharp/

などがあります。

更に詳しく

「Udon」と一口に言っても、文脈によって意味合いが少し異なります。
そのため、ここまでに出した単語についても改めて記述したいと思います。

"Udon"とUdon VMについて

一般に"Udon"というと"SDK3でのワールドギミック作成手段"のことを指しますが、厳密には、UdonはUdon Assembly(後述)から生成されたバイトコードを実行するVMであり、文脈によってはこちらを指す場合があります。
Udon GraphもUdon Sharpも、実際には全てUdon Assemblyに変換(コンパイル)され、実行されています。
そのため、Udon AssemblyやVM用のバイトコードに変換する機構(Unityエディタ拡張)を作成することで、自由に言語を作ることが出来ます。
実際に、Udon Sharp以外にもUdonを扱う方法を有志が作成しており、例えばCyanTriggerなどがあります。

なお、私が知っているUdon VMの重要な仕様として、変数512個分しかヒープ領域が用意されていない、というものがあります。
他にも色々あるかもしれません。

Udon Assemblyについて

Udon Assemblyはアセンブリ言語のようなプログラミング言語です。
Udon VMで実行するためのバイトコードに対応しているため、自作コンパイラはバイトコードを直接生成せずにUdon Assemblyを中継することが出来ます。

Udon Graphについて

Udon Graphは公式が提供するノード型のビジュアルプログラミング言語です。
VRChatが用意したAPIやUnity/C#のメソッド等をノードで扱います。
複雑なものを作ると、ノードを置くたびに数秒待たされることになったりするため、本格的なものを作るにはあまり向いていない面もあります。

Udon Sharpについて

Udon SharpはMerlin氏が作成した、C#風に記述できるプログラミング言語です。
Udonの仕様上、本来のC#ほど自由には記述出来ませんが、それでも非常に有用です。
複雑なものを作るための方法として選ぶ人は多いです。