Contents
Pavlov VR SDK の取得と Unity 環境構築
この章では、公式サイトから正しい SDK を入手し、Unity 2020.3 LTS/2021.3 LTS へインポートするまでの一連の流れを解説します。SDK が正しく導入できていれば以降のマップ作成やデバッグが格段に楽になるため、最初のステップは慎重に行いましょう。
SDK のダウンロード手順
公式サイトのトップページ( https://pavlov‑vr.com )から Developers → SDK に遷移すると、最新バージョンのダウンロードリンクが表示されます。現在(2026 年 7 月時点)提供されている URL は次の通りです。
|
1 2 |
https://pavlov-vr.com/downloads/pavlov-sdk-latest.zip |
この ZIP ファイルには以下が同梱されています。
PavlovVR.unitypackage(Unity 用パッケージ)com.pavlovvr.sdk/フォルダ(Package Manager 用 Git URL)- ドキュメント PDF とサンプルシーン
※注意:過去に公開された別ドメインのリンクは削除されているため、必ず上記公式ページから取得してください。
Unity へのインポート手順(Package Manager 推奨)
SDK は「Unity Package Manager (UPM)」に対応しており、Git URL を利用すれば依存関係が自動で解決されます。以下の手順でプロジェクトへ追加しましょう。
- Unity Hub で LTS バージョンをインストール
-
Unity Hub → Installs →
Add→2020.3 LTSまたは2021.3 LTSを選択し、必要なモジュール(Android Build Support は不要)をインストールします。 -
新規プロジェクト作成
-
Unity Hub の Projects タブで
New Project→ テンプレートは 3D → プロジェクト名と保存場所を決めてCreate。 -
Package Manager から SDK を追加
- メニューの Window → Package Manager を開く。
-
左上の「+」ボタン → Add package from git URL… を選択し、次の URL を貼り付けます。
https://github.com/PavlovVR/pavlov-sdk.git?path=/Packages/com.pavlovvr.sdk -
Addをクリックすると、Pavlov VR SDKが In Project に表示され、必要なサブパッケージ(XR Interaction Toolkit 依存など)が自動で取得されます。 -
ローカルディスクからのインポートが必要な場合
- ZIP を解凍し
PavlovVR.unitypackageが残っている場合は、Assets → Import Package → Custom Package からファイルを選択してインポートできます。 - ただし UPM で追加した方が後のアップデート管理が楽になるため、基本的には Git URL の方法を推奨します。
必要な XR 関連プラグイン
| プラグイン | 入手先 | 推奨バージョン |
|---|---|---|
| XR Interaction Toolkit | Unity Registry(Package Manager) | 2.5.0 以上 |
| Oculus Integration | Unity Asset Store | 45.0 以降 |
Package Manager の Unity Registry タブで XR Interaction Toolkit を検索し、Install ボタンをクリックします。Oculus Integration は Asset Store からダウンロードし、プロジェクトにインポートしてください(VR デバイスが Oculus Rift/Quest 系の場合は必須です)。
プロジェクト雛形作成とマップ設計の基本方針
この章では、チームで共有しやすいフォルダ構成と実尺スケール設定のポイントを説明します。整理されたディレクトリと正しいスケールは、後々のビルドエラー防止やパフォーマンス最適化に直結します。
推奨フォルダ構成例(H3)
以下は 1 つのマップを作る際のベースディレクトリです。プロジェクト全体で統一すれば、アセット検索やバージョン管理がシンプルになります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Assets/ ├─ Maps/ │ └─ MyFirstMap/ │ ├─ Scenes/ # *.unity シーンファイル │ ├─ Prefabs/ # 再利用可能オブジェクト │ ├─ Materials/ │ ├─ Textures/ │ └─ NavMeshData/ # ベイク済み NavMesh アセット ├─ Scripts/ │ └─ MapLogic/ # マップ固有ロジック ├─ Audio/ │ └─ SFX/ # 効果音 └─ Plugins/ ├─ XRInteractionToolkit/ └─ OculusIntegration/ |
Scenesフォルダに保存するシーンは MyFirstMap.unity と命名し、プロジェクトビューで一目で分かるようにします。
実尺スケールとコリジョンの指針
- プレイヤー身長:Unity のデフォルトカメラ高さ(約 1.8 m)を基準に設計してください。床面は Y=0、天井は 3 m 前後が快適です。
- コリジョンの選択:Mesh Collider はパフォーマンス負荷が大きいため、可能な限り Box, Sphere, Capsule Collider を使用します。静的オブジェクトは
Staticフラグを付与し、Physics 計算から除外しましょう。 - 視認距離:VR ではレイテンシ低減が重要です。主要オブジェクトはプレイヤーから 10 m 以内に配置し、遠方は LOD(Level of Detail)や Occlusion Culling を活用します。
この章では、地形作成と AI 用 NavMesh ベイクの具体的手順を示します。Terrain と静的メッシュが正しくコリジョン設定されていないと、AI がマップ外に抜け落ちる問題が頻発します。
Terrain の作成フロー(H3)
- Terrain オブジェクト配置
-
GameObject → 3D Object → Terrainを選択し、シーン中央に配置。サイズはデフォルトの 500 × 500 m が使いやすいです。 -
起伏作成
-
インスペクタの Paint Terrain タブで
Raise/Lower Heightツールを選び、ブラシサイズと強さを調整しながら山や谷を描きます。 -
外部 Heightmap のインポート(任意)
- 高精度な地形が必要な場合は PNG 形式の Heightmap を
Import Rawで読み込み、スケール (Height) を 0〜600 m 程度に合わせます。
Static Mesh 配置とコリジョン設定(H3)
| 手順 | 内容 |
|---|---|
| ① モデルのインポート | FBX/OBJ ファイルを Assets/Maps/MyFirstMap/Prefabs にドラッグ&ドロップ。インスペクタで Mesh Renderer → Read/Write Enabled をオフにし、ビルドサイズを削減。 |
| ② コリジョン追加 | Add Component → Box Collider(もしくは Sphere/ Capsule)を付与し、メッシュの外形に合わせてサイズ調整。コライダーが複数必要な場合は子オブジェクトで分割すると管理が楽です。 |
| ③ Static フラグ | コリジョンとレンダリングが固定の場合は Static チェックボックスをオンにし、ライトマップ生成や NavMesh 計算の対象にします。 |
- Navigation ウィンドウ表示
-
メニューから Window → AI → Navigation を開く。
ObjectタブでStaticフラグが付いたオブジェクトを自動的に Navigation Static に設定します。 -
ベイク設定
-
Bakeタブのパラメータ例:- Agent Radius:0.3 m
- Agent Height:1.8 m
- Step Height:0.4 m
- Max Slope:45°
-
ベイク実行
Bakeボタンをクリックし、完了後はシーン上に青い領域が表示されます。NavMeshDataアセットとしてAssets/Maps/MyFirstMap/NavMeshData/に保存しておくと再利用が容易です。
ポイント:Terrain の高さや Mesh Collider が正しく設定されていないと、ベイク時に “Missing NavMesh” 警告が出ます。必ずコリジョンの有無を確認し、必要なら
Navigationタブで手動でマークしてください。
インタラクティブオブジェクトとカスタムスクリプト実装
Pavlov SDK が提供する SpawnPoint コンポーネントはネットワーク同期が組み込まれているため、マルチプレイ環境でも安全に使用できます。この章では武器スポーンやヘルスポイントの配置方法と、簡易的な C# ロジック例を紹介します。
SpawnPoint を用いたオブジェクト設置(H3)
- Prefab 作成
Assets/Maps/MyFirstMap/Prefabsに右クリック → Create → Prefab → 名前はWeaponSpawn.prefabとします。- コンポーネント追加
- 生成したプレハブをシーンにドラッグし、インスペクタで Add Component → Pavlov.SDK.SpawnPoint を選択。
- パラメータ設定
ItemIDに武器コード(例:"AK47")を入力し、Respawn Timeを 30 s など適切に設定します。
ヘルスポイントは同様の手順で HealthPack.prefab を作り、Pavlov.SDK.HealthPack コンポーネントの HealAmount = 50 を指定してください。
カスタム C# ロジック例(H3)
以下はラウンドタイマーを実装したシンプルなスクリプトです。RoundTimer.cs として保存し、任意の空オブジェクトにアタッチします。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
using UnityEngine; using Pavlov.SDK; public class RoundTimer : MonoBehaviour { [Tooltip("ラウンド時間(秒)")] public float roundTime = 300f; // 5 分 private void Start() { InvokeRepeating(nameof(UpdateTimer), 1f, 1f); } private void UpdateTimer() { roundTime -= 1f; if (roundTime <= 0) { CancelInvoke(); GameManager.Instance.EndRound(); // SDK が提供する API } } } |
- ポイント:
GameManager.Instance.EndRound()は Pavlov SDK の標準メソッドで、ラウンド終了時に全プレイヤーへ通知が自動的に送られます。 - 拡張例:残り時間を HUD に表示したい場合は
UI.Textコンポーネントと連携させれば実装が完了します。
テスト・デバッグから Steam Workshop 公開までのフロー
完成マップをローカルで検証し、問題点を修正したうえで正式に公開する手順をまとめます。VR では視覚的なバグが見つけにくいため、デバッグコンソールとプロファイラの活用が不可欠です。
ローカルテストとデバッグ支援ツール(H3)
| ツール | 起動方法 | 主な用途 |
|---|---|---|
| Play Mode | Unity エディタ上部の ▶︎ ボタン | シーン全体の挙動確認 |
| Pavlov SDK Debug Console | Ctrl + Shift + D(エディタ)またはメニュー Tools → Pavlov → Debug Console |
SpawnPoint や NavMesh の警告がリアルタイムで表示されます |
| Profiler | Window → Analysis → Profiler | フレームレートや GC アロケーションを測定し、90 FPS 未満にならないか確認 |
テスト時にコンソールに SpawnPoint missing NavMesh や Collider overlap といった警告が出た場合は、対象オブジェクトのコリジョン・NavMesh 設定を再チェックしてください。
Steam Workshop へのマップ公開手順(H3)
- マップを .pmap にエクスポート
-
Unity のメニューから Pavlov SDK → Export Map を選択し、保存先に
MyFirstMap.pmapとして出力します。エクスポート時は「Include NavMesh」「Compress Textures」オプションをオンにするとサイズが抑えられます。 -
Steam クライアントで Workshop ページへアクセス
-
Steam ライブラリ → Pavlov VR を右クリック →
View Workshop(または直接 URL https://steamcommunity.com/app/555160/workshop/)を開く。 -
「Create New Item」ボタンをクリック
-
Workshop ページ右上にある Upload New Content → Map を選択します。
-
マップ情報の入力
| 項目 | 推奨設定 |
|------|----------|
| タイトル | 30 文字以内、検索キーワード(例: “Fast‑Paced Deathmatch Map”)を含める |
| 説明文 | 200 字程度で概要・特徴・推奨プレイ人数を記載 |
| サムネイル画像 | PNG、512×512 ピクセル以上。マップの全景が分かりやすいもの |
| タグ |FPS,CustomMap,PavlovVR,Multiplayerなど関連キーワード |
| バージョン | Unity のビルド番号(例:2021.3.18f1)を明記するとトラブル回避に有効 | -
.pmap ファイルのアップロード
-
「Browse」ボタンで先ほどエクスポートした
MyFirstMap.pmapを選択し、Upload をクリック。アップロードが完了するまで数分かかることがあります。 -
公開設定と確認
- 「Visibility」を
Publicに設定し、「Publish」ボタンでマップを公開します。公開後は自分の Workshop ページに表示され、他ユーザーからダウンロード可能になります。
重要ポイント:Steam のアップロード UI は頻繁に更新されますが、2026 年 7 月時点では上記手順が公式ドキュメントと一致しています。UI が変わった場合は
Pavlov VRクライアント内の「Workshop」タブを必ず確認してください。
よくあるエラーと対処法(H3)
| エラー | 主な原因 | 推奨対策 |
|---|---|---|
| MissingReferenceException | Prefab 内でスクリプトが参照しているオブジェクトが未設定 | インスペクタで全コンポーネントを開き、None (Object) が残っていないかチェック |
| NavMesh not baked | Terrain の一部が Navigation Static に設定されていない |
Navigation ウィンドウの Object タブで対象オブジェクトにチェックを入れ、再度ベイク |
| Scale mismatch (Terrain 100x larger) | Heightmap インポート時にスケール倍率がデフォルトのまま | Terrain の Height パラメータを実寸(例:600 m)に合わせて調整 |
| Missing assets on Steam | .pmap エクスポート前に参照ファイルがプロジェクト外に残っている | Unity で Assets → Reimport All を実行し、全アセットを再取得 |
まとめ
- SDK の取得と導入:公式サイトから最新 ZIP をダウンロードし、Package Manager の Add package from git URL 機能でインポートするのが最も安全です。
- プロジェクト構成:統一されたフォルダ階層と 1.8 m 基準のスケール設定により、チーム開発・ビルドエラーを大幅に削減できます。
- Terrain + Static Mesh + NavMesh:正しいコリジョン付与とベイクパラメータ設定で AI の移動が安定し、マップ全体の信頼性が向上します。
- インタラクティブ要素:SDK が提供する
SpawnPoint系コンポーネントを活用し、カスタム C# スクリプトでゲームロジック(例:ラウンドタイマー)を実装すれば、マルチプレイでも同期が取れた体験を提供できます。 - テスト・デバッグ:Play Mode と Pavlov SDK Debug Console、Profiler の併用でパフォーマンスとバグの早期発見が可能です。
- Steam Workshop 公開:
.pmapエクスポート → Steam クライアントの Workshop → 必要メタ情報入力 → アップロードという流れを守れば、他ユーザーに安全に配布できます。
以上の手順とベストプラクティスに沿って作業すれば、初心者でも品質の高い Pavlov VR カスタムマップを完成させ、Steam Workshop へスムーズに公開できるでしょう。 Happy mapping!