【VRChat】UdonとUdonSharp入門:どこからプログラムが必要になるのか

作成: 2025-12-19最終更新: 2026-09-09

SDKの部品だけで作れることと、Udonが必要になる境界を対比で整理します。UdonとUdonSharpの関係、コードが動く場所、最初に知っておくべき3つの誤解を解説します。

床と壁ができて、光も入りました。次は「入口のボタンを押すと照明が消える」をやりたくなります。

ところが、Unityにボタンを置いても何も起きません。Animatorを付けても、VRChatの「使う」操作にはつながりません。どこかでプログラムが必要になるのですが、その境界がどこにあるのか分かりません。

この記事では、SDKの部品だけで作れることと、Udonが必要になることを対比で整理します。コードはまだ書きません。

壁のスイッチに、歯車の描かれたカードから線がつながっている

この記事でわかること

  • 置くだけで動く部品と、プログラムが要る場面の境界
  • Udon・UdonSharp・Udon Graphの関係
  • コードが動くのは、サーバーではなく各プレイヤーのPCだということ
  • 書き始める前に知っておくと詰まらない3つのこと
Sponsored


境界は「操作に最初から答えてくれるか」

VRChat SDKは、VRChat向けの部品カタログのようなものです。置くだけで動くものが、思ったよりたくさんあります。

椅子・鏡・コップは置くだけで動くが、スイッチ・扉・カウンターはプログラムが要る

置くだけで動くのは、こういうものです。

  • 歩ける床、ぶつかる壁(ColliderとRigidbody)
  • 鏡に映る(VRC Mirror Reflection)
  • 椅子に座る(VRC Station)
  • コップを拾って投げる(VRC Pickup。位置を共有するなら VRC Object Sync も部品)
  • 空間音響、ライト、マテリアル、Skybox
  • 配布されている動画プレイヤーやギミックのPrefabを 置くだけ

一方、こういうものはUdonが要ります。

  • 壁のスイッチを押すと、あのライトが消える
  • ボタンを押すと、扉が開く
  • 入ってきた人に説明パネルを出す
  • 点数を数えて、掲示板に表示する

並べてみると、共通点が見えてきます。置いた部品が、来訪者の操作に最初から答えてくれるならUdonは不要。「このボタンを押したら、あのライトを消す」のように、自分で組み合わせを決めるならUdonが要ります。

境目にあるものもあります。配布Prefabの中身はUdonで書かれていますが、使う側は書きません。逆に、AnimatorやUnityのUIボタンを置いただけでは、VRChatの「使う」操作にはつながりません。

まずはカタログを探す、それでも足りなければ自分で書く。この順番で進めると、覚える量がずっと減ります。

Sponsored

UdonとUdonSharpの関係

名前が似た言葉が3つ出てくるので、役割で分けます。

Unityで空間と見た目、VRChat SDKでワールドの基本機能、UdonSharpで操作に応じた反応を作る
  • Udon は、VRChatがワールド内で動かしてよいプログラムの仕組みです。実体はこれです
  • Udon Graph は、ノードを線でつないでUdonを作る方法です。配線図を描くイメージです
  • UdonSharp は、同じUdonを、C#に似た文章で書く方法です

大事なのは、GraphとUdonSharpは書き方の違いで、動く実体はどちらもUdon だということです。「Graphで始めた人は別世界」ではありません。

このシリーズではUdonSharpを使います。文章のほうが検索でヒットしやすく、記事のコードをそのまま試せて、後から何を変えたかも見やすいからです。古い記事に「Graphが正式でUdonSharpは非公式」と書かれていても、いまは気にしなくて構いません。UdonSharpはSDKに含まれています。

書いたコードは、そのままVRChatに届くわけではありません。

C#の処理をUdonSharpがUdonプログラムへ変換し、VRChatで反応として実行する流れ

書いた文章を、VRChatが実際に動かせるデータへ変換する工程を コンパイル と呼びます。保存すると自動で走るので、自分で操作することはありません。変換された結果を、シーンのオブジェクトに取り付けて初めて動きます。

手順書を書いただけでは家電は動かない。変換して、家具の受け口にセットする。そういう関係です。

書き始める前に知っておく3つ

コードの文法より先に、この3つを知っておくと詰まりません。

1. プログラムは「上から最後まで読み切る」ものではない

Udonのコードは、小説のように最初から最後まで走るわけではありません。待ち受け です。

「このオブジェクトが使われたとき」「誰かが入ってきたとき」といったきっかけがあって、初めてそこの処理が動きます。このきっかけを イベント と呼びます。

最初に使うのは、ほぼ1つだけです。Interact() は「このオブジェクトが使われた」という通知を受け取る入口です。

だから、コードを書く前に決めるのは「どのタイミングで動かしたいか」になります。

2. プログラムは「そのオブジェクト」に付く

ワールド全体にプログラムを書くのではありません。家具1つ1つに頭脳を付ける イメージです。

スイッチのプログラムは、スイッチに付けます。消したいライトは、そこから参照でつなぎます。ライト側に付けても、スイッチを押したときには動きません。

「どこに付けるか」を間違えると、コードが正しくても何も起きません。これは初心者がいちばんよく踏む落とし穴です。

3. 最初は、自分の画面でしか起きない

これがVRChatならではの、いちばん大事な話です。

Aさんの画面のライトだけが点き、Bさんの画面にはまだ伝わらない

ライトを消すプログラムを書いて押すと、押した人の画面だけ 暗くなります。隣の人の画面は明るいままです。

これは壊れているのではありません。同じインスタンスにいても、各自のPCがそれぞれワールドを動かしているからです。全員の画面で消したいなら、同期 という別の仕組みが必要になります。

この話を知らないと、最初の成功を失敗だと思ってしまいます。まず自分の画面で動かし、共有したい部分を決めてから ネットワーク同期入門 へ進みます。

よくある誤解

先に潰しておくと、あとが楽になります。

よくある誤解実際は
UdonはVRChatのサーバーで動く各プレイヤーのPCで動きます。 専用のゲームサーバーはありません
自分が消したライトは、自動で全員に伝わる最初は自分の画面だけ。 共有には同期が必要です
GraphとUdonSharpは別のエンジン書き方の違いだけ。 動く実体はどちらもUdonです
ワールドを出すには必ずUdonが要る床・鏡・椅子・Pickupだけなら不要 です
UnityのC#入門を先に終わらせる必要がある不要です。 VRChatのUdonSharpとして小さく始めれば足ります
プログラムが多いほど本格的毎フレーム動く処理は重い です。最初は「起きたときだけ」動く形にします

特に上の2つは、先に知っておいてください。ここを誤解したまま進むと、正常な動作が全部バグに見えてしまいます。

Sponsored

おまけ:先に知っておくと良いこと

  • 動かないときに見る順番: (1) そのオブジェクトにUdonが付いているか (2) Consoleに赤いエラーが出ていないか (3) 使おうとしている対象は、本当にそのオブジェクトか (4) Inspectorの参照欄が埋まっているか。この4つでほとんど解決します
  • UnityのC#記事はそのまま貼らない: 変数やifの考え方は共通ですが、使えるAPIの範囲が違います。検索するときは「VRChat UdonSharp」を付けてください。詳しい制限は C#の対応範囲 で扱います
  • 配布Prefabを分解しない: 動画プレイヤーなどのPrefabに自分のコードを混ぜると、原因が追えなくなります。使うときはそのまま置きます
  • Masterは運営ではない: そのインスタンスで進行役になっているプレイヤーのことです。自分がMasterになることもあります。詳しくは 所有権を理解する で扱います
  • 古い記事に注意: VRC_Trigger を使う手順はSDK2時代のもので、いまは使えません。CyanEmuも公式のClientSimに置き換わっています

まとめ

Udonは、ワールドの部品に「自分で決めた反応」を足す仕組みです。

  • 境界は「置いた部品が、操作に最初から答えてくれるか」
  • Udon Graphとの違いは書き方だけ。実体はどちらもUdon
  • コードは待ち受け。イベントが来たときだけ動く
  • プログラムはワールドではなく、そのオブジェクトに付く
  • 最初は自分の画面でしか変わらない。共有には同期が必要

判断に迷ったときの問いかけは、「これは、部品を置くだけで答えてくれるか?」 です。答えがイエスなら、コードは書かなくて済みます。

次は実際に手を動かします。最初のUdonSharp で、押すと色が変わるCubeを作ってみましょう。

VRChat このセクションのノート63