Unityは開い たけれど、何を置けばVRChatのワールドになるのか分かりません。最初から部屋を完成させようとすると、モデルの用意や照明で手が止まります。
まずは 6m四方の床に出現して、歩いて、落ちたら戻ってくる ところまでを作ります。見た目は簡素ですが、この土台がないと椅子もボタンも置けません。
この記事では、床・スポーン地点・落下復帰の3つを設定して、実際のVRChatで自分のワールドに入るまでを解説します。コードは書きません。
この記事でわかること
- 床の「見た目」と「当たり判定」が別物である理由
- VRCWorld・Scene Descriptor・スポーン地点の関係
- 落ちたときに戻ってくる高さの決め方
- ClientSimとBuild & Testの使い分け
環境構築 を終えて、Worldsプロジェクトを開いた状態から始めます。
作るのは、床とスポーンと戻る高さ
最初のワールドで必要なのは3つだけです。

- 床: 立てる場所。見た目のかたちと、ぶつかる判定の両方が必要です
- スポーン地点: 入ったときに現れる位置と向き
- 戻る高さ: 落ちたときにスポーン地点へ戻される高さ
この3つは別々の設定に見えますが、実際にはつながっています。床の高さがずれればスポーン位置がずれ、スポーン位置がずれると戻る高さの意味も変わります。順番に作って、最後にまとめて確かめます。
Unityの画面は、当面4つだけ覚えれば足ります(詳しくは Unityの画面と操作 にまとめています)。Hierarchy が置いたものの一覧、Scene が制作者の視点で見る作業画面、Inspector が選んだものの設定欄、Console がエラーの表示欄です。Sceneでカメラを動かしても、プレイヤーの出現位置は変わりません。それは後でスポーン地点に 設定します。
ワールドに必要な3つの部品
VRChatは、Unityのシーンをそのままワールドとして扱いません。「これはワールドです」「入口はここです」と書いた設定が必要です。
その役割を、受付にたとえると分かりやすくなります。

- VRCWorld は、ワールドの受付です。シーンに1つ置きます。これがないとVRChatは「ただのUnityシーン」としか見ません
- VRC Scene Descriptor は、受付に置く書類です。VRCWorldに付いているコンポーネントで、「入口はここ」「何メートル落ちたら戻す」を書き込みます
- スポーン地点 は、入口のマットです。空のオブジェクトを床の上に置いて作ります
大事なのは、マットを床に置いただけでは入口にならない ことです。書類のほうに「このマットを入口とする」と登録して、はじめて出現位置になります。ここを飛ばすと、原点に出現して床にめり込みます。
VRCWorldとスポーン地点は、親子にする必要はありません。並べて置いて、書類から参照させるだけです。
実践:6mの床を作って、歩いて、落ちて、戻る
ここから手を動かします。完成すると、床の端に出現し、中央を向いて立ち、端から歩いて落ちると、すぐスポーン地点へ戻ってきます。
新しいシーンを用意します。「File → New Scene」で基本のシーンを作り、「File → Save As」で Assets/Scenes/WorldLab.unity として保存してください。Directional Lightは残します。Main Cameraは、この作例のプレイヤー視点には使わないので削除します。
最終的なHierarchyはこうなります。
WorldLab
├─ Directional Light
├─ Floor
├─ VRCWorld
└─ SpawnPoint
1. 床を作る
Hierarchyの空いている場所で右クリックし、「3D Object → Cube」を選びます。名前を Floor にして、Inspectorの Transform に次の値を入れます。
| 項目 | X | Y | Z |
|---|---|---|---|
| Position | 0 | -0.1 | 0 |
| Rotation | 0 | 0 | 0 |
| Scale | 6 | 0.2 | 6 |
UnityのCubeは1辺が1単位で、この作例では1単位を1mとして扱います。Scaleを (6, 0.2, 6) にすると、6m四方で厚さ20cmの板になります。
PositionのYを -0.1 にする理由があります。Cubeの位置は 中心 を指すので、厚さ0.2の板の中心を-0.1に置くと、上面がちょうど Y = 0 にそろいます。以降の数値がすべて「床の表面からの高さ」で 考えられるので、後が楽になります。

床にはCubeを使います。Planeでも床は作れますが、Planeは元の大きさが約10m四方で、当たり判定もMesh Colliderになるため、初めての1枚としては手間が増えます。Cubeなら最初からBox Colliderが付いていて、押しつぶすだけで床になります。
そのBox Colliderを確認します。見えている床と、ぶつかる床は別物 です。Colliderがなければ、床のかたちがあってもすり抜けて落ちていきます。
- FloorのInspectorで Box Collider が有効になっていること
- Is Trigger がオフ であること(オンにすると通り抜ける検知用の領域になります)
- Layerは Default のまま触らないこと
VRChatはいくつかのレイヤーを特別に扱っていて、床を Walkthrough にすると「見えるのにすり抜ける」状態になります。この段階でレイヤーを変える必要はありません。
2. VRCWorldとスポーン地点を置く
受付を置きます。
- 「VRChat SDK → Show Control Panel」を開く
- Builderで「Add a VRCSceneDescriptor」を選ぶ
- Hierarchyに
VRCWorldが追加される
すでにDescriptorがあるシーンでは、重ねて追加しません。今回は新しいシーンから始めているので、ここで1つ追加します。
次に入口のマットを作ります。Hierarchyで右クリックして「Create Empty」を選び、名前を SpawnPoint にします。
| 項目 | X | Y | Z |
|---|---|---|---|
| Position | 0 | 0.1 | -2 |
| Rotation | 0 | 0 | 0 |
| Scale | 1 | 1 | 1 |
床はZ方向に-3から3まで広がっているので、Z=-2は床の内側の手前寄りです。Yの0.1は、床の表面(Y=0)より10cm上という意味です。目の高さに合わせる必要はありません。
最後に、書類へ登録します。VRCWorldを選び、Inspectorの VRC Scene Descriptor にある Spawns の要素数を1にして、Element 0 へHierarchyの SpawnPoint をドラッグしてください。
VRCWorld
VRC Scene Descriptor
Spawns[0] ──参照──▶ SpawnPoint の Transform
ここで入れるのは名前の文字列ではなく、作ったオブジェクトそのものへの参照 です。名前が似ていても、ドラッグして入っていなければ効きません。
出現時の向きは、SpawnPointのRotationで決まります。Rotationが (0, 0, 0) なら、青いZ軸の方向が正面です。Sceneビューを回しても向きは変わらないので、変えたいときはRotationのYを変更します。
3. 落ちたら戻る高さを決める
床の外へ歩けば落下します。戻ってこられるように、Scene Descriptorの Respawn Height Y を -5 にします。
既定値は -100 です。広い地形のワールドでは誤って戻されないための値ですが、6m四方の床では 端から落ちて100m落下するまで戻ってきません。数秒間ただ落ち続けるので、初めて試したときは「壊れた」と感じます。

逆に、床より 高い 値にすると事故ります。床がY=0のときにRespawn Heightを0や1にすると、立っているだけで「線より下」と判定され、出現とリスポーンを延々と繰り返します。
いまの位置関係を整理すると、こうなります。
Y = 0.1 SpawnPoint(出現位置)
Y = 0 床の上面
↓ 床の外へ落下
Y = -5 この高さを下回ると、スポーン地点へ戻される
Respawn Heightは、特定の箱に入ったことを検知する仕組みではなく、ワールド全体にかかる水平の線 です。後で地下室を作るなら、地下室の床よりさらに低くします。「地下に降りた瞬間に戻される」ときは、まずこの値を疑ってください。
エリアごとに別の場所へ戻したくなったら、落下復帰とチェックポイント でコードを使う方法に進みます。
4. ClientSimで歩く
シーンを保存して、Unity上部のPlayボタンを押します。Worlds SDKに含まれる ClientSim が動いて、Unityの中でVRChatと同じように歩けます。
Gameビューをクリックして操作を移し、W・A・S・D で移動、マウスで視点を動かします。確かめるのは3つです。
| 操作 | 期待する結果 |
|---|---|
| Playを始める | 床の手前寄りに出現し、床の中央を向いている |
| 前後左右へ歩く | 床をすり抜けずに歩ける |
| 床の外へ歩く | 落下し、1秒ほどでスポーン地点へ戻る |
3つとも通れば、この記事の目標は達成です。ジャンプの高さや歩く速さは別の設定なので、ここでは成功条件に入れません。
Play中に変えた値は、停止すると元に戻るものがあります。試した値が良ければ、停止してから同じ値を入力し直して保存してください。
5. Build & TestでVRChatに入る
ClientSimで歩けたら、実際のVRChatでも同じことをします。先にClientSimで通しておく のが大事です。Unityの中で落ちるなら、VRChatでも落ちます。順番を逆にすると、ビルドの待ち時間のあとに同じ失敗を見ることになります。

- Playを停止して、シーンを保存する
- SDKのControl Panelを開き、Builderの検査結果を読む
- 修正が必要な項目が出たら、内容を読んでからSDKの自動修正を使う
- ビルド対象をPC(Windows)にして、「Build & Test」を選ぶ
- Clientsは1にする。デスクトップで確認するなら「Force Non-VR」を有効にする
- VRChatが起動したら、出現・歩行・落下復帰をもう一度確かめる
自分のワールドに自分で入れた時点で、最初のワールドは完成です。
なお、Build & Testは自分のPCで動かすローカルのテストです。他の人が訪問できるようにする アップロードは別の操作 で、VRChatアカウント側の条件も関わります。ここは アップロードと更新 で扱います。
うまくいかないときは
症状から見る場所を絞ります。一度に複数の値を変えず、1か所ずつ確かめてください。
- 床が見えているのに落ちる → FloorのBox Colliderが有効か、Is Triggerがオフか、Layerが
Defaultか - 床の下や外に出現する → Spawnsに
SpawnPointがドラッグで入っているか。入っていないと原点に出現します。次にSpawnPointのYが床の表面より上か - 出現とリスポーンを繰り返す → Respawn Heightが床より高くなっています。床の下の値にします
- VRChatで開くと前の状態のまま → 保存してから再ビルドしたか。前回のビルドを起動していないか
おまけ:先に知っておくと良いこと
- Staticとライトベイクはまだ不要: 床を焼き込んで軽くす る話は、壁や照明を置いてからで間に合います。照明とベイク で扱います
- 床のマテリアルは後で変えられる: 白いままでも動作は同じです。木目やタイルにするのは マテリアルとテクスチャ から
- レイヤーは基本的に触らない: VRChatはいくつかのレイヤーを予約していて、勝手に名前を変えるとアップロード時に上書きされます。自由に使えるのは番号の大きいUser Layerです
- 複雑な形の当たり判定は、箱の組み合わせで作る: Mesh Colliderは見た目どおりの判定を作れますが重くなります。階段や柱は、Box Colliderをいくつか置くほうが軽くて安定します。当たり判定の仕組みは 当たり判定の基礎 で扱います
まとめ
最初のワールドは、3つの設定でできています。
- 床は「見た目」と「Collider」の2つがそろって初めて立てる
- スポーン地点は、置くだけでなくScene Descriptorへ登録して初めて入口になる
- Respawn Heightは床より下、スポーン地点より下に置く
- ClientSimで通してから、Build & Testで実際のVRChatに入る
うまくいかないときの問いかけは、「見た目の設定と、動きの設定を混ぜていないか?」 です。床が見えることと歩けること、マットを置くことと入口として登録することは、それぞれ別の作業です。
次は Cubeで部屋と階段を作る で壁と入口を足すか、マテリアルとテクスチャ で床の見た目を整えます。触って反応する物を置きたくなったら、最初のUdonSharp へ進んでください。