Contents
開発環境の準備と必要ソフトウェアのインストール
PC(Steam)版 Pavlov VR 用にカスタムマップを作るには、Unity と Steam の開発ツールが必須です。ここでは Windows 64bit 前提で、2026 年時点で動作が確認されている最新の推奨バージョンと取得手順をまとめます。Quest 版は Workshop 機能が未実装なので、PC 向けに限定した環境構築が最もスムーズです。
Unity Hub と Unity 2022 LTS のインストール
Unity Hub は複数バージョンの管理・インストールを一元化できる公式ツールです。Pavlov SDK は Unity 2022.3 LTS(最新パッチ)での動作が保証されているため、まずこのバージョンを導入します。
- 公式サイトの Unity Hub ダウンロードページ からインストーラを取得し、指示に従ってインストール。
- Unity Hub 起動後、左メニュー Installs → Add をクリックし、一覧から 2022.3.x LTS(最新のパッチ番号)を選択。
- Modules 画面で Windows Build Support (IL2CPP) のみチェックし、XR 関連モジュールはオフにしたままで Install を実行。
備考:IL2CPP は C# を C++ に変換してネイティブコード化するビルド方式で、Steam 版のパフォーマンスと互換性が高く評価されています。
Steamworks SDK と Pavlov SDK の取得・リンク
マップをビルドし Workshop に公開するために必要な二つの SDK を入手します。2026 年現在も公式サイトからダウンロード可能です。
| ソフトウェア | 入手先(2026 年) | 主な用途 |
|---|---|---|
| Steamworks SDK | https://partner.steamgames.com/ (Steam パートナー登録後) | ビルド設定、Workshop API、アップロードツール |
| Pavlov SDK | 同上の「Tools」セクションから取得可能 | Pavlov 用レイヤー・タグ・プレハブ・サンプルスクリプト |
取得手順は次の通りです。
- Steam パートナーサイトにログインし、メニュー SDK & Tools → Steamworks SDK から最新パッケージをダウンロード。
- 同ページ内の Pavlov SDK を選択し ZIP ファイルとして保存。解凍先は Unity プロジェクトと同一階層にしておくとインポートが楽です。
- Unity エディタで
Assets → Import Package → Custom Packageを開き、解凍した.unitypackageを選択して全項目をインポート。
注意:Quest 版は Workshop 機能が未実装のため、本手順は PC(Steam)版限定です。詳細は公式ガイド https://www.moguravr.com/pavlov-vr/ を参照してください。
新規 Unity プロジェクト作成と Pavlov 用テンプレート設定
正しいプロジェクト構成を最初に決めておくことで、後続のビルドエラーやレイヤー不整合を防げます。この章では「Built‑in」レンダリングパイプラインで動作するシンプルな設定手順と、テンプレートのインポート方法を解説します。
推奨プロジェクト設定(XR Plug‑in Management 無効化)
Pavlov SDK は XR プラグインが無効な状態を前提に設計されているため、作成時にオフにしておく必要があります。
- Unity Hub の Projects タブで New をクリック。
- テンプレートは 3D (Core)、プロジェクト名は
MyFirstPavlovMapなど分かりやすいものを入力。 - Advanced Settings → Render Pipeline はデフォルトの Built‑in を選択し、XR Plug‑in Management のチェックは外したまま Create。
- 作成後、
Edit → Project Settings → Player → Other Settingsで以下を統一します。 - Scripting Runtime Version:
.NET 4.x - Api Compatibility Level:
.NET Standard 2.0
理由:Built‑in パイプラインは Pavlov の標準マテリアルと互換性が高く、XR プラグインが有効だと自動的にレイヤーやタグが上書きされるケースがあります。
Pavlov テンプレートのインポート手順
テンプレートシーンはレイヤー・タグ・基本マテリアルをあらかじめ設定した状態で提供されます。これをプロジェクトに組み込むだけで、初期構成が完了します。
- 前節でダウンロードした Pavlov SDK の
.unitypackageを Unity エディタにドラッグ&ドロップ。 - インポート画面で All にチェックし、必須アセット(
Pavlov/Prefabs,Pavlov/Scripts,Pavlov/Materials)が選択されていることを確認して Import。 - インポート完了後、
Assets → Pavlov → Templatesフォルダに EmptyMap.unity が作成されます。このシーンを開くと自動で以下が設定されています。
| 設定項目 | 内容 |
|---|---|
| レイヤー | Pavlov, Default, Ignore Raycast など計 8 種類が追加 |
| タグ | PlayerSpawn, WeaponPickup が事前登録 |
| カメラ | VR 用リギングは無効、PC 版向けの FPS カメラが有効 |
まとめ:テンプレートシーンをベースにすれば、レイヤーやタグの手動設定が不要になるため作業時間が大幅に短縮できます。
基本的なレベルデザインフロー
マップの形状作成から NavMesh 設定、Pavlov 独自プレハブの配置までを順番に説明します。パフォーマンスを意識したオブジェクト数や LOD の活用ポイントも併せて紹介します。
Terrain は大規模マップの土台として便利ですが、NavMesh が正しく生成されていないとプレイヤーがスポーンできません。以下の流れで設定しましょう。
GameObject → 3D Object → Terrainを選択し、サイズは 1024 × 1024 ユニット程度(必要に応じて変更可)を作成。- 地形ツールで高さ・テクスチャを整えたら、メニュー
Window → AI → Navigationで Navigation ウィンドウを開く。 -
Bake タブのパラメータを次のように設定し、
Bakeボタンを実行。 -
Agent Radius:
0.5 m(プレイヤーコリジョンは 0.3 m のため余裕を持たせる) - Step Height:
0.4 m - Max Slope:
45°
ポイント:NavMesh が広範囲に渡ってベイクされていないと、スポーン時に「NavMesh missing」エラーが出やすくなります。
Pavlov プレハブの配置と注意点
Pavlov SDK に同梱されている各種プレハブはタグ・コンポーネントが予め設定されています。正しく配置するだけでゲームロジックが機能します。
| カテゴリ | 推奨プレハブ例 | 配置時の留意点 |
|---|---|---|
| 武器 | Pavlov/Prefabs/Weapons/Rifle.prefab など |
Box Collider を有効にし、タグは WeaponPickup に設定 |
| スポーンポイント | Pavlov/Prefabs/SpawnPoints/TeamA_Spawn.unity 系列 |
チームごとに最低 2 個以上配置し、必ず NavMesh 上に置く |
| インタラクティブアイテム | Pavlov/Prefabs/Interactables/HealthPack.prefab |
Interactable コンポーネントの Use Distance を適切に(標準は 2 m) |
例:最小構成デモマップ(壁 4 枚、遮蔽物 10 個、武器スポーン 3 カ所)のシーンサイズは約 150 KB。オブジェクトが 500 を超えるとビルド時に「Too many colliders」エラーが頻発するため、LOD グループやインスタンシングで最適化してください。
スクリプト・イベント設定とローカルテスト手順
マップのゲームロジックは C# スクリプトで記述します。この節では初心者向けにシンプルなスポーン・サウンド制御スクリプト例と、Steam 版クライアントでのデバッグ方法を示します。
簡易ゲームモードスクリプト(C#)
以下はチーム別スポーン位置をランダムに選び、マッチ開始時に効果音を再生する最小構成です。PavlovNetworkManager は Steamworks が提供するマルチプレイヤー管理クラスです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
using UnityEngine; using Pavlov; public class SimpleGameMode : MonoBehaviour { // チームごとのスポーン位置配列(Inspector で設定) public Transform[] teamASpawns; public Transform[] teamBSpawns; void Start() { SpawnPlayers(); PlayIntroSound(); } private void SpawnPlayers() { foreach (var p in PavlovNetworkManager.Instance.Players) { var spawn = (p.Team == Team.A) ? teamASpawns[Random.Range(0, teamASpawns.Length)] : teamBSpawns[Random.Range(0, teamBSpawns.Length)]; p.Transform.position = spawn.position; p.Transform.rotation = spawn.rotation; } } private void PlayIntroSound() { var src = GetComponent<AudioSource>(); src.clip = Resources.Load<AudioClip>("Sounds/MatchStart"); src.Play(); } } |
- 解説:
PavlovNetworkManager.Instance.Playersから現在接続中のプレイヤーリストを取得し、チーム属性に応じてteamASpawns/teamBSpawnsのいずれかへ配置しています。 - 使用方法:空オブジェクトに本スクリプトと
AudioSourceコンポーネントを付与し、インスペクタでスポーン配列をドラッグ&ドロップしてください。
ローカルデバッグの手順(コンソールコマンド)
ビルド前に Unity エディタ上だけでなく、実際のゲームクライアントで挙動を確認できます。
- Steam から Pavlov VR を起動し、設定画面で Console(
~キー)を有効化。 - 以下コマンドでローカルビルド
.pakをロードします(パスは実際の出力先に合わせて変更)。
map_load "C:\MyFirstPavlovMap\Builds\MyFirstPavlovMap.pak"
- コンソールに “Map loaded successfully” と表示されたら、
Steam\steamapps\common\PavlovVR\logs\log_map.txtにデバッグ情報が出力されます。 - エラー例
NavMesh missing on spawn pointが出た場合は NavMesh のベイク範囲やスポーン地点のレイヤー設定を見直します。
まとめ:コンソール経由でマップを即座にロードできるため、スクリプトやコリジョンの不具合をビルドサイクルごとに待たずに検証できます。
ビルド設定・エラー対処・Steam Workshop への公開手順
完成したマップを Windows 64bit 用にパッケージ化し、Workshop にアップロードするまでのフローをまとめます。ビルドサイズや圧縮方式の選択が重要です。
Windows ビルド設定と推奨サイズ上限
Pavlov の Workshop は 2026 年現在 150 MB が最大アップロード容量となっています。そのためビルドは余裕を持って 100 MB 以下 に抑えるのが安全策です。
File → Build Settingsを開き、プラットフォームは PC, Mac & Linux Standalone、アーキテクチャは x86_64。-
Player Settings → Publishing Settingsで Compression Method を LZ4HC に変更します。 -
LZ4HC(High Compression) は高速な解凍と比較的高い圧縮率を兼ね備えており、Steam のアップロード制限に有利です。
- 不要アセットは
Assets → Remove Unused Assetsで削除し、テクスチャは 1024 × 1024 以下にリサイズして容量を削減。
エラー例:
Error: Asset bundle size exceeds limitが出た場合は上記の「未使用アセット削除」や「テクスチャ解像度ダウンサンプリング」で対処してください。
主なビルドエラーとパフォーマンス低下への対策
| エラーメッセージ | 想定原因 | 推奨対処法 |
|---|---|---|
| Missing reference to Pavlov/Prefabs/... | SDK のインポート漏れ | Pavlov SDK を再インポートし、依存関係を確認 |
| NavMesh not baked on spawn point | スポーン位置が NavMesh 外 | NavMesh ベイク範囲を拡大、またはスポーン地点を移動 |
| FPS が 30 FPS 以下に低下 | 高ポリゴンオブジェクト・リアルタイムライト過多 | LOD グループ導入、ライトは Baked に変更し影の数を削減 |
Steam Workshop 用アイテム作成とサブミット手順
ビルドした .pak を Steamworks の Content Builder でアップロードします。以下の設定例は公式推奨に準拠しています。
- ビルド済みフォルダ(例:
MyFirstPavlovMap)を Steamworks SDK のtools/ContentBuilder配下に配置。 - 同ディレクトリに
builder.jsonを作成し、次の内容で保存(appIDは Pavlov VR の 555160)。
|
1 2 3 4 5 6 7 8 |
{ "appID": "555160", "desc": "MyFirstPavlovMap – Beginner Arena", "contentfolder": "MyFirstPavlovMap", "previewfile": "Preview.jpg", "visibility": 0 // 0=公開、1=非公開 } |
- コマンドプロンプトで
builder.exe -buildを実行。正常に完了すると Workshop の管理ページに新規アイテムが作成されます。 -
アイテム編集画面で以下を設定(公式ガイド参照:https://steamcommunity.com/workshop/about/?l=japanese&appid=555160)
-
タイトル:分かりやすく、検索に引っ掛かりやすい名前
- プレビュー画像:推奨サイズ 1920 × 1080 ピクセル、JPEG/PNG 形式
- デモ動画(任意):YouTube 埋め込みリンクで 30 秒以内のプレイ映像が望ましい
重要:Quest 版は Workshop 機能が未実装です。PC 用ビルドのみをアップロードし、商品説明に「PC 版専用」旨を必ず記載してください。
トラブルシューティングまとめ
| 症状 | 主な原因例 | 解決策 |
|---|---|---|
| マップが読み込めない | .pak ファイル名に全角・空白文字あり |
英数字とアンダースコアのみで構成された名前に変更 |
| オブジェクトが落下し続ける | NavMesh が未ベイク、またはレイヤー設定ミス | NavMesh を再ベイクし、対象オブジェクトに Pavlov レイヤーを適用 |
| FPS が極端に低い | ライトが多数リアルタイムで稼働中 | すべてのライトを Baked に切り替え、影は必要最低限に削減 |
結論:上記チェックリストを順に確認すれば、ほとんどのビルド・ロード問題は解決できます。
用語解説(初心者向け)
| 用語 | 説明 |
|---|---|
| IL2CPP | Unity のスクリプトコンパイラで、C# を中間言語 (IL) → C++ → ネイティブコードに変換します。ビルドサイズは大きくなるものの、実行時性能とプラットフォーム互換性が向上します。 |
| LZ4HC | 「High Compression」版 LZ4 の略で、圧縮率はやや低いものの解凍速度が非常に速い方式です。Steam Workshop へのアップロード時に推奨されます。 |
| XR Plug‑in Management | Unity が提供する AR/VR デバイス向けプラグイン管理機能です。Pavlov の PC 版では不要なため無効化します。 |
| NavMesh | AI キャラクターやプレイヤーが移動できる領域を定義した「ナビゲーションメッシュ」。ベイク(生成)しないとスポーンポイントでエラーが出ます。 |
| LOD (Level of Detail) | オブジェクトの距離に応じて表示品質を切り替える仕組み。遠景では低ポリゴンモデルに差し替えて描画負荷を削減します。 |
以上 が 2026 年時点で確認された最新情報に基づく Pavlov VR カスタムマップ制作フローです。手順どおりに環境構築とビルド設定を行えば、Workshop への公開までスムーズに進められます。ぜひ本ガイドを参考にオリジナルマップ作成に挑戦してください。