使い方ガイド(経験者向け)
Unityの基本操作(Inspector/Prefab/GameObject等)は前提知識として省略し、PortalSystem固有の手順・仕様・注意点だけを簡潔にまとめます。Unity基礎から知りたい場合は初心者向けガイドへ。各パラメータの詳細はパラメータ辞典を参照してください。
構成要素は3つ:PortalTrigger(入口)/PortalDestinationMarker(出口)/PortalSystemRoot(ScreenFadeController+SnapshotCameraController、シーンに1個)。全処理は完全ローカル(ネットワーク同期なし)。ビルドごとにPortalBuildProcessorが全ポータルを走査して配線し直す。
導入
- VRChat SDK3 - Worlds 3.7.1以降(UdonSharp同梱)を導入
- .unitypackageをインポート(
Assets/PortalSystem/+Assets/PortalGimmick/) - UdonSharpコンパイル待ち
- TMP Essentials必須(未導入だとラベルがピンクに)。ダイアログが出なければ
Window > TextMeshPro > Import TMP Essential Resources
設置
Tools > PortalSystem > セットアップウィザード でワンクリック配置可能。PortalSystemRootをシーンに1個のみ配置- 入口Prefab(Box/Round/Button)を配置
Portal_Destinationを着地位置・向きで配置- Triggerの
destinationにDestinationをアサイン - Destination子の
ShotPointでアングル調整(Game Viewは16:9固定で確認) - Build & Test / アップロード時に自動配線
ビルド前チェック
Tools > PortalSystem > シーン検証 で PortalBuildProcessor と同一基準の10項目をチェック。Error/Warning/Infoの3段階、対象オブジェクトへのジャンプと一部自動修正に対応。
Prefabの種類
| Prefab | 起動方式 | 備考 |
|---|---|---|
Portal_Trigger_Box | 接触(isButtonMode=false) | 矩形範囲。AreaIndicator同梱 |
Portal_Trigger_Round | 接触 | 円形範囲。AreaIndicator同梱 |
Portal_Trigger_Button | Interact(isButtonMode=true) | ButtonVisual(台座+キャップ)同梱、rootコライダーで判定 |
Portal_Trigger_Door_Button | Interact+扉演出 | Button型ベース。手前開き110度、doorOpenWait/doorCloseDelayで調整 |
Portal_Trigger_Door_Open | 接触 | Box型ベース。開放固定+DoorwayPreviewQuad(縦長クロップ)。PreviewBillboard無効厳守 |
アングル調整
PortalDestinationMarkerカスタムインスペクタで16:9チェック・Scene View⇔ShotPoint視点コピー・試し撮りプレビュー(Inspector内512×288一時RT)が可能。見たまま=本番反映。
プレビューパネル構造
PreviewBillboard有効化でプレイヤー方向へY軸追従(activeDistance/turnSpeed)。フレーム差し替えは必ずPreviewPanel直下(PreviewQuad子だとスケール1.6×0.9が乗り歪む)。詳細は辞典参照。
生成物
ビルド時に Assets/PortalGenerated/<シーン名_GUID>/ へRT/Materialを自動生成(削除しても再ビルドで復元)。プレースホルダーは Textures/PortalPlaceholder.png(1024×576)、Tools > PortalSystem > プレースホルダー画像を再生成で初期化。
制限事項
- ポータル変更後は必ず再ビルド(保存だけでは配線が更新されない)
- 着席中はBox/Round型が反応しない(VRChat既知バグ:着席中はトリガー判定無効)。Button型は着席中も可
- プレビューは各クライアントのローカル撮影(同期なし)
- 日本語ラベルは
DestinationLabelのフォントアセットを日本語対応(NotoSansJP SDF等)に変更が必要(既定LiberationSansは日本語グリフなし) - RT解像度: PC 1024×576 / Quest自動512×288
fadeLockThreshold(既定0.8)超過でImmobilize(true)、以後キャンセル不可
既知の問題
| 症状 | 原因/対処 |
|---|---|
| ラベルがマゼンタ | TMP Essentials未導入 → インポート |
| 日本語が「□」 | フォント未設定 → NotoSansJP SDFに変更 |
| プレビューが古い/ずれる | ポータル変更後の再ビルド忘れ |
| 着席中に反応しない | VRChat仕様。Button型へ変更で回避 |