自分のワールドから、友達のワールドへ直接行けるようにしたい。あるいは、シリーズものの2作目への入口を置きたい。
VRChatには ポータル という仕組みがあります。触れるとそのワールドへ移動する入口です。
ただし、同じワールドの中を移動するのには使えません。 ここを取り違えると時間を無駄にします。この記事では、2つの移動の違い と、それぞれの作り方を扱います。
この記事でわかること
- ポータルとテレポートの使い分け
- VRC Portal Markerの置き方
- ワールドIDの取り方
- 同じワールド内を移動する方法
はじめての部屋を作る を済ませた状態から始めます。
ポータルは玄関、テレポートは廊下
似た「移動」でも、2つはまったく別の仕組みです。

| ポータル | テレポート | |
|---|---|---|
| 行き先 | 他のワールド | 同じワールドの中 |
| たとえると | 玄関のドア | 廊下 |
| 必要なもの | VRC Portal Marker | Udonのコード |
| 移動のしかた | ワールドを読み込み直す | その場で位置が変わる |
| 他の人は | 一緒には来ない | 動くのは自分だけ |
ポータルは家から出る動作です。 ワールドを読み込み直すので、いま一緒にいる人とは別れることになります。
テレポートは家の中の移動です。 一瞬で位置が変わるだけで、同じインスタンスに留まります。
作りたいものが「2階へ上がる階段の代わり」なら、ポータルではなくテレポートです。同じワールドIDを指定しても、同じ部屋の別の場所には飛べません。 別のインスタンスに入り直すことになります。
実践:他のワールドへの入口を置く
部屋の一角に、別のワールドへ行ける入口を作ります。

1. 行き先のワールドIDを調べる
まず、行き先のワールドIDが要ります。
VRChatのサイトでそのワールドのページを開くと、URLに wrld_ で始まる長い文字列 が入っています。
wrld_00000000-0000-0000-0000-000000000000
これがワールドIDです。自分の別のワールドを指したいなら、そのプロジェクトのシーンで VRCWorld を選び、Pipeline Manager のBlueprint IDを見れば分かります。
行き先は、他の人が入れるワールドにしてください。 非公開のままだと、来た人が弾かれます。
2. ポータルを置く
「Create Empty」で ExitPortal を作り、壁ぎわの (0, 0, 5) あたりに置きます。
「Add Component」で VRC Portal Marker を追加します。
| 欄 | 入れるもの |
|---|---|
| Room Id | 調べた wrld_... の文字列 |
| Name | ポータルの上に出す名前(例:第2ワールドへ) |
位置は床の高さに置いてください。 ポータルは指定した位置から上に向かって立ち上がるので、空中に置くと浮いたものになります。
3. 門らしく見せる
ポータルそのものの見た目はVRChatが描くので、こちらでは変えられません。まわりを作れば、印象は変えられます。
ExitPortal の位置に合わせて、次を置きます。
| 名前 | 作り方 |
|---|---|
PortalFrame | Cubeを3つ組み合わせて、門型のアーチにする |
PortalSign | World Space の Canvas と TextMeshPro。門の上に行き先の説明 |
説明を1行添えておくと親切です。 「ここから出ると、いまの部屋を離れます」と分かるだけで、うっかり入ってしまう人が減ります。
4. 確かめる
ポータルはPlayモードでは確かめられません。 実際にアップロードして、VRChatの中で見る必要があります。
アップロードして入り、次を見ます。
| 確認 | 期待する結果 |
|---|---|
| ポータルが立っているか | 門の位置に、渦のような入口が見える |
| 名前が出ているか | 設定した名前が表示される |
| 近づく | 行き先のワールド名とサムネイルが出る |
| 入る | そのワールドへ移動する |
近づいたときに「Invalid」のような表示が出るなら、IDが間違っています。 もう一度URLからコピーし直してください。
同じワールドの中はテレポートで
2階へ上がる、隠し部屋へ入る、スタート地点に戻る。同じワールドの中の移動は、Udonで書きます。

使うのは TeleportTo() です。
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
[UdonBehaviourSyncMode(BehaviourSyncMode.None)]
public class TeleportPad : UdonSharpBehaviour
{
[SerializeField] private Transform destination;
public override void Interact()
{
VRCPlayerApi player = Networking.LocalPlayer;
if (!Utilities.IsValid(player) || destination == null) return;
// 押した人だけが移動する
player.TeleportTo(destination.position, destination.rotation);
Debug.Log("[TeleportPad] 移動しました");
}
}
渡すのは位置と向きの2つです。 行き先に空のオブジェクトを1つ置いて、その Transform を割り当てるのがいちばん簡単です。
向きも渡せることが大事です。 移動した瞬間に壁を向いていると、来た人が一瞬混乱します。行き先の空オブジェクトを、見せたい方向へ回しておいてください。
動くのは押した人だけです。 他の人はその場に残ります。全員を移動させたいなら、Network Events で全員に実行してもらいます。
こちらは Playモードでも確かめられます。 ポータルと違って、ワールドの読み込み直しが起きないためです。
うまくいかないときは
- ポータルが出ない → Playモードでは表示 されません。アップロードして確かめます
- 無効なポータルと表示される → Room IdのつづりかIDそのものが違います。URLからコピーし直します
- 入ったのに弾かれる → 行き先が非公開です。誰でも入れる状態か確認します
- ポータルが空中に浮いている → 置いた位置が高すぎます。床の高さに合わせます
- テレポートで壁を向く → 行き先のオブジェクトの回転を直します
- テレポートしても動かない → Destinationが
Noneか、Colliderがなくて押せていません
おまけ:先に知っておくと良いこと
- 入口の近くに置かない: スポーン地点のすぐ横にポータルがあると、入ってきた人がうっかり出ていきます。奥まった場所か、意図がはっきり伝わる場所に置いてください
- 出ることを伝える: 「別のワールドへ移動します」と1行書いてあるだけで、事故が減ります
- 自分のワールドをつなぐと回遊してもらえる: シリーズものを作っているなら、互いにポータルを置くと行き来してもらえます
- テレポートは演出と組める: 移動の前に画面を暗くする、音を鳴らす。一瞬で切り替わるより自然になります
- 使いどころはいろいろ: 姉妹ワールドへの入口、イベント会場から控室への移動、脱出ゲームの次のステージ、長い階段の代わり
まとめ
移動には2種類あって、道具が違います。
- ポータルは他のワールドへの玄関。VRC Portal Marker に
wrld_のIDを入れる - 同 じワールドの中はテレポート。Udonの
TeleportTo()を使う - ポータルはアップロードしないと確かめられない
- テレポートは押した人だけが動く
置く前の問いかけは、「これは家から出る移動か、家の中の移動か」 です。ここで使う道具が決まります。
落ちたときに戻す仕掛けなら 落下したら復帰させる、全員をそろえて動かすなら Network Events へ進んでください。