VRChatワールド制作の始め方:小さな部屋を育てる6ステップ
6m四方の床から始めて、光・音・ギミック・同期・公開まで塗り重ねる学習マップ。各ステップの「ここで止めてもいい」到達点と、1日・週末・1か月の3コースを整理します。
6m四方の床から始めて、光・音・ギミック・同期・公開まで塗り重ねる学習マップ。各ステップの「ここで止めてもいい」到達点と、1日・週末・1か月の3コースを整理します。
ALCOMまたはVCCでWorldsプロジェクトを作り、UnityでVRChat SDKのパネルが開くまで。4つの道具の関係、保存場所の決め方、初回起動の待ち方、合格ラインの確かめ方を解説します。
Hierarchy・Scene・Inspector・Projectの役割を分け、Cubeを置いて動かして保存するまで。視点で迷子になったときの復帰、Cubeが床に埋まる理由、使わないUnity機能の扱いも解説します。
6m四方の床、VRCWorld、スポーン地点、Respawn Heightを置いて、ClientSimで歩き、Build & Testで実際のVRChatに入るまで。数値と結果を対応させながら、最初の歩ける場所を作ります。
6m四方の床に壁を立て、幅1.6mの入口と3段の階段を作ります。VRで狭く感じない寸法の基準、見た目と当たり判定の分け方、階段で引っかからない作り方を解説します。
同じCube3つを、壁・くぐれる飾り・落ちる箱に作り分けます。Collider・Is Trigger・Rigidbodyの役割を1つずつ切り替えて確かめ、VRChatで「歩いて押す」が安定しない理由も解説します。
Boothなどで手に入れた家具をワールドに置くまで。unitypackageの取り込み方、巨大になる/小さくなるスケール問題の直し方、当たり判定の付け方、ピンクの直し方を解説します。
05同じランプを2つ置き、片方だけ変える・元からまとめて変える・変更を戻すを試します。OverrideとApply・Revertの違い、マテリアルを共有すると両方変わる理由を解説します。
06同じ部屋でスポーンの向き・衝立・椅子の配置を変えて比べます。初めて来た人が席を見つけられる置き方と、横並びと向かい合わせで会話がどう変わるかを実際に試します。
Shader・Material・Textureの役割を壁紙にたとえて整理し、6mの床にタイル画像を貼ります。Tilingを実寸で決める考え方、ピンクになる原因、共有マテリアルの落とし穴まで解説します。
Point Light 1つをBakedにして焼き込み、床に影を出すまで。Realtime・Baked・Mixedの違い、Contribute GIとGenerate Lighting、ベイク直後に暗くなる理由を解説します。
ベイクした部屋で小物だけ暗くなる理由を、焼き付けた光と空間の標本の違いから解説します。Light Probeの置き方と、Reflection Probeで金属に部屋を映す方法まで。
Skyboxを差し替えて空を変え、Fogで遠景をぼかします。空が部屋の明るさまで変える理由と、霧の色を空に合わせる理由を、同じ庭で見比べながら解説します。
部屋のどこでも同じ音量で流れるBGMと、近づくと大きくなる環境音を置き分けます。音量の目安、距離減衰の設 定、会話の邪魔にならない音量の決め方を解説します。
Particle Systemで立ちのぼる光の粒を1つ作ります。最初に触る5つの設定と、粒の数より画面を覆う面積が重さを決めることを、実際に見比べながら解説します。
AudioLinkを導入して、BGMの低音で光る壁パネルを1枚作ります。音を4つの数字にして配る仕組みと、対応シェーダーで光らせる最短ルートを解説します。
08重くなる原因には順番があります。鏡・リアルタイム影・LODを1つずつ調整して、Statsの数字が下がるのを見ます。見た目を保ちながら軽くする手順を解説します。
SDKの部品だけで作れることと、Udonが必要になる境界を対比で整理します。UdonとUdonSharpの関係、コードが動く場所、最初に知っておくべき3つの誤解を解説します。
U# Scriptを作り、まずログで「押せているか」を確かめてから色を変えます。C#ファイル・Program Asset・Udon Behaviourの関係と、Interactが反応しないときの切り分け順を解説します。
プログラミング未経験者向けに、変数・if・for・関数の4つを1つの作例で使います。押した回数を数えて、3つのライ トの色を順に変えるボタンを作ります。
値と参照の違いを「メモ」と「指差す指」でつかみ、ライトの明るさを切り替えます。コードを直したのにInspectorの値が変わらない理由と、Noneのまま動かない定番の詰まりも解説します。
SerializeField・Header・Tooltip・Rangeで、ライトの設定欄を整理します。Rangeは入力を制限するだけでコードからは無視されることや、保存と同期の違いも解説します。
Start・Update・Interactがいつ動くかを、回転する飾りと停止ボタンで体験します。Time.deltaTimeが必要な理由と、Updateを使わずに済ませる考え方も解説します。
Interactは「対象を操作できたとき」、Input Eventsは「ボタンが押されたとき」。この違いをログで確かめ、操作距離とColliderの関係、VRとデスクトップの差を整理します。
入口のボタンと奥のボタン、どちらからでも同じライトを操作できるようにします。処理をライト側にまとめる設計と、型付き参照とSendCustomEventの使い分けを解説します。
SendCustomEventDelayedSecondsで「押して3秒後に実行」を作ります。Updateで秒数を数えるより軽くて読みやすい理由と、連打されたときの扱いも解説します。
OnPlayerJoinedとOnPlayerLeftで人数を数え、壁の掲示板に表示します。「誰のクライアントで、誰について呼ばれるか」を整理し、入室時に既にいた人の分も呼ばれる仕組みを解説します。
同じ処理をコピペしていた3つのライトを、配列でまとめます。添字が0から始まる理由、範囲外アクセスの防ぎ方、Inspectorで要素が未設定のときの事故を解説します。
配列では足りなくなったときのDataListとDataDictionary。JSONで書いたライトの設定を読み込み、名前で値を引いて反映します。型を確かめて取り出す書き方も解説します。
普通のC#が動かないときに、自分のバグかUdonの制約かを 見分けます。よく踏む4つの制約と、DataListによる代替の書き方を実際に手を動かして確かめます。
状態は黒板、合図は叫び、所有権はマイク。Manual同期のboolで照明スイッチを作り、2人での確認と途中参加までを一通り通します。同期でつまずく順番も整理します。
所有権はオブジェクトごとに1人だけ。Masterとの違い、自動で移る場面、所有者が退出したときの引き継ぎを、操作権のボタンと照明のボタンで確かめます。
押すと全員にチャイムが鳴る仕掛けを作ります。同期変数との使い分け、送り先の3種類、途中参加の人には届かないこと、連打への対策を解説します。
持てる小物にVRC Object Syncを付けて、投げた位置を全員で共有します。位置は自動で運ばれるが、点灯などの状態は別に同期が要る理由も解説します。
BGM音量のスライダーをPlayerDataに保存して、次回の訪問で復元します。復元を待たずに読むと保存が消える理由と、その避け方を実際に手を動かして確かめます。
VRCPlayerObjectで、入室した人ごとに専用のオブジェクトを配ります。テンプレートとコピーの関係、VRCEnablePersistenceで保存する範囲、自分のコピーの探し方を解説します。
1つのboolから、ライト・BGM・表示の3つをまとめて切り替えます。状態と反応を分ける設計、Startで初期状態をそろえる理由、ボタン自身を消してしまう失敗の避け方を解説します。
Box Colliderの範囲に入った本人だけに目印を出します。誰のクライアントで呼ばれるかの整理、isLocalが必要な理由、検知が抜ける場面と対処を解説します。
ボタンから自分を移動させるテレポーターを作ります。空のTransformで着地点と向きを決める設計、床にめり込む問題、落下の勢いが残る問題への対処を解説します。
VRC Portal Markerで他のワールドへの入口を置きます。同じワールド内の移動 には使えないこと、その場合はTeleportToを使うことを、両方作りながら解説します。
標準のリスポーンとの使い分けから、落ちたら直前のチェックポイントへ戻る仕掛けまで。高さの監視、速度のリセット、無限リスポーンを防ぐ書き方を解説します。
06VRChatの椅子は、見た目と座る仕組みを組み合わせて作ります。Stationの役割を図でつかみ、SDK付属の椅子を配置して、座る・立つ・退出先を調整する流れを解説します。
Rigidbody・Collider・VRC Pickupで持てる小物を作り、Useボタンでライトを点けます。飛んでいく、床に沈むといった定番の問題と、握り位置の調整も解説します。
SDKのミラーを置いて、ボタンでON/OFFできるようにします。鏡が重い理由、映す対象のレイヤーを絞る方法、既定でオフにする運用を解説します。
World Space Canvasにボタンとスライダーを置き、押すとUdonの処理が動く設定パネルを作ります。VRChatで押せるようにするために必要な部品と、反応しないときの原因を解説します。
扉の端に回転軸を作り、閉じたポーズと開いたポーズをAnimatorで切り替えます。Animation ClipとControllerの関係、Has Exit Timeを外す理由、UdonのSetBoolまで解説します。
ボタンで開閉する扉を、全員の画面でそろえます。Animatorの状態ではなくboolを同期する理由、途中参加の人にも伝わる仕組み、所有権の扱いを解説します。
押すと全員に同じ目が出るサイコロを作ります。各自が乱数を引くと食い違う理由と、所有者が1回だけ決めて配るという考え方を、実際に作りながら確かめます。
実行中にオブジェクトを増やす代わりに、あらかじめ置いた3個を出し入れします。在庫係への依頼、在庫切れの扱い、返すときに位置を戻す理由を解説します。
スクリーンに動画を流し、あとから入った人も同じ場面から見られるようにします。同期するのはURLと開始時刻だけであること、読み込みを待ってから位置を合わせる理由を解説します。
Web上のテキストをワールドの掲示板に表示します。頼んであとから受け取る仕組み、本文と状態表示を分ける理由、読み込みに失敗しても案内が消えない作り方を解説します。
Web上の画像をワールドのパネルに表示します。ダウンローダーをフィールドで保持する理由、Disposeの扱い、失敗しても前の絵を残す作り方を解説します。
押しても動かないボタンを、ConsoleとDebug.Logで原因まで追い詰めます。入口のログで切り分ける順番と、ClientSim・Build & Test・実機の使い分けを解説します。
最適化の前に、重さの正体を4つに分けて測ります。Stats・Profiler・Frame Debugger・ビルドサイズの使い分けと、記録の残し方を解説します。
毎フレームの処理をイベントに置き換えて、Udonの負荷を下げます。取得結果を覚えておく効果、同期の送信回数を減らす考え方も、測って確かめながら解説します。
掴めない、真っ暗、ピンク、同期しない、ビルドできない。よくある10の症状から、原因の候補と直し方の記事を引けるようにまとめました。切り分けの3つの質問も紹介します。
転がり終わった小物が眠っているかを確かめ、眠らない原因を潰します。レイヤーで衝突の組み合わせを減らす方法と、Mesh Colliderを避ける理由も解説します。
同じシーンからAndroid版をビルドして、同じBlueprint IDに載せます。Androidで真っ先に外れるもの、テクスチャの端末別設定、確認の手順を解説します。
同じ設定パネルを、座って遊ぶ人・片手の人・スマホの人が使えるように直します。文字サイズ、ボタンの間隔、音量を段階にすること。この3つを実際に手を動かして調整します。
入室に時間がかかるワールドの容量を減らします。容量の大半がテクスチャである理由、Max SizeとCrunch圧縮の効かせ方を、数字を見比べながら解説します。
046mの床をPrivateワールドとしてアップロードし、目印を動かして同じIDへ更新します。Build & TestとBuild & Publishの違い、Blueprint IDの役割、更新が届かないときの切り分けを解説します。
公開前に確かめる10項目を、実際に1周しながら見ていきます。スポーン地点、落下、当たり判定、鏡、音量、端末、容量。作った本人が見落としがちなところを順に潰します。
Community Labsに出したあとの一周を扱います。連絡先と更新履歴の置き方、報告の受け止め方、更新するときの注意、数字との付き合い方を解説します。