Contents
開発環境の前提条件と必須ツール
この章では、BONELAB の MOD を作成するために最低限必要となる OS・ハードウェア、および公式が推奨している開発ツールをまとめます。環境が整っていないとビルドエラーや実行時のパフォーマンス低下につながりやすくなるため、まずはここでチェックしてください。
対応 OS とハードウェア要件
Windows 10/11(64 ビット)をベースにした PC が最も安定して動作します。以下は 公式ドキュメント(Unity の「PC VR Development」ガイドおよび BONELAB の Modding Wiki)で推奨されている最低構成です。実際のプロジェクト規模や使用するアセットに応じて余裕を持ったスペックを選択してください。
| 項目 | 推奨スペック | 補足 |
|---|---|---|
| CPU | Intel Core i5‑9600K 以上、または AMD Ryzen 5 3600 以上 | シングルスレッド性能が高いほどインポートやビルド時間が短縮されます。 |
| RAM | 16 GB(32 GB 推奨) | 大型アセットやシーンを扱う場合は余裕のあるメモリが必要です。 |
| GPU | NVIDIA GeForce GTX 1060(6 GB)以上、または同等の AMD Radeon | OpenXR と Unity のレンダリング要件を満たすもの。 |
| ストレージ | SSD 容量 100 GB 以上(空き容量は余裕を持って) | プロジェクトファイル・ビルド出力ともに高速な読み書きが求められます。 |
| OS | Windows 10 version 1909 以降、または Windows 11 | 最新の更新プログラムが適用された状態で使用してください。 |
※ 注意
本記事に記載したバージョン番号や URL は執筆時点で確認できた情報を元にしていますが、公式サイトの更新に伴い変更される可能性があります。実際にダウンロード・インストールする前に必ず公式ページをご確認ください。
必要な開発ツールと取得先
以下のツールはすべて 公式配布 または 信頼できるリポジトリ から入手してください。バージョンは執筆時点で「安定版」とみなされている最新リリースです。
| ツール | 推奨バージョン(2026‑07 時点) | ダウンロード元 |
|---|---|---|
| Unity Hub + Unity 2022.3 LTS | 2022.3.x (LTS 系列の最新パッチ) | https://unity.com/download |
| BONELAB Modding SDK | 最新リリース(GitHub リポジトリの release タブ) |
https://github.com/bonelab-modding/sdk/releases |
| MarrowSDK(テンプレート) | 最新コミット | 同上 SDK の「Templates」フォルダ |
| Monke Mod Manager | 2.4.x 系列最新 | https://github.com/MonkeModManager/releases |
| Git for Windows | 2.44.x 系列最新 | https://git-scm.com/download/win |
| Oculus Developer Hub (ODH) | 最新版 | https://developer.oculus.com/tools/odh/ |
インストール手順(概要)
- Unity Hub を起動し、左上の「Installs」から Unity 2022.3 LTS を追加。
- 「Android Build Support」と「OpenJDK」のチェックを忘れずに。
- BONELAB SDK の
*.unitypackageを公式リポジトリから取得し、作成した空プロジェクトへインポート。 - MarrowSDK テンプレート を Git クローンまたは ZIP ダウンロードでローカルに展開し、Unity Hub の「Add」からプロジェクトとして登録。
- 必要に応じて Monke Mod Manager と ODH をインストールし、デバイス側の開発者モードを有効化する。
ポイント:SDK やテンプレートは必ず Unity エディタ上で「Import Package」→「Custom Package」を選択して全項目をインポートしてください。手動でファイルをコピーすると依存関係が破損しやすくなります。
プロジェクト作成と SDK の組み込み
このセクションでは、BONELAB 用の Unity プロジェクトをゼロから構築し、公式 SDK を正しく組み込む手順を解説します。設定ミスがあるとビルド時にエラーが発生したり、Quest で正常に起動できなかったりするため、各項目は慎重に確認してください。
Unity プロジェクトの新規作成
まずは Unity Hub から「New」ボタンを押し、以下の設定でプロジェクトを作ります。
- テンプレート:
3D (URP)(Universal Render Pipeline) - プロジェクト名:例
MyBonelabMod - 保存先:SSD 上の空き容量が十分にあるフォルダ
注意:URP は Quest のパフォーマンスを最適化したレンダリングパイプラインです。Legacy の Built‑in を使用するとデバイス側でフレーム落ちが起こりやすくなります。
BONELAB SDK のインポート
- 公式リポジトリから取得した
BONELAB_SDK_*.unitypackageを Unity エディタへドラッグ&ドロップ。 - 表示されるウィンドウで 全項目にチェック を入れ、
Importをクリック。 - インポート完了後、
Assets/BonelabSDKフォルダが作成されていることを確認します。
名前空間の取り扱い
公式 SDK のスクリプトは Bonelab.Modding(※実際の名前空間は SDK の README を参照)という名前空間で提供されています。以下はサンプルコードですので、使用する前に該当ファイルの using 行を正しいものに書き換えてください。
|
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 37 |
// 正しい名前空間例(実際は SDK のドキュメントをご確認ください) using UnityEngine; using Bonelab.Modding; // ← ここが正式な名前空間 public class SimpleNPC : MonoBehaviour { public Transform[] waypoints; public float speed = 2f; public float chaseRange = 5f; private int _currentIdx; private Transform _playerCam; void Start() => _playerCam = Camera.main.transform; // VR カメラ void Update() { if (Vector3.Distance(transform.position, _playerCam.position) < chaseRange) ChasePlayer(); else Patrol(); } void Patrol() { var target = waypoints[_currentIdx]; MoveTowards(target); if (Vector3.Distance(transform.position, target.position) < 0.2f) _currentIdx = (_currentIdx + 1) % waypoints.Length; } void ChasePlayer() => MoveTowards(_playerCam); void MoveTowards(Transform goal) { var dir = (goal.position - transform.position).normalized; transform.position += dir * speed * Time.deltaTime; transform.LookAt(goal); } } |
Tip:IDE(Visual Studio / Rider)で名前空間が解決できない場合は、
Assembly Definitionが正しく設定されているか確認しましょう。
XR Plug‑in Management の有効化
Edit → Project Settings → XR Plug-in Managementを開く。- OpenXR にチェックを入れ、プラットフォーム別に「PC (Standalone)」と「Android (Quest)」の両方を有効化。
- 「Feature Groups」から Hand Tracking と Eye Gaze(必要なら)をオンにします。
この設定が完了すると、Unity がビルド時に OpenXR ランタイム向けのコードを自動的に生成してくれます。
カスタム NPC/武器の作成フロー
ここではモデルインポートから物理設定、簡易 AI スクリプトまでを一連の手順で解説します。実装例はすべて Unity 標準 API と公式 SDK のみで構成しているため、他の MOD と衝突しにくい設計になっています。
1. モデルインポートとスケール調整
BONELAB はメートル単位を採用しています。外部ツール(Blender・Maya)からエクスポートしたモデルは センチメートル基準 が多いため、インポート時にスケール係数を調整してください。
| 手順 | 操作内容 |
|---|---|
| 1 | Assets → Import New Asset で FBX/GLTF ファイルを選択 |
| 2 | インスペクタの Model タブで Scale Factor = 0.01 を設定 |
| 3 | Rig タブは Animation Type = None(静的オブジェクトの場合) |
| 4 | 必要に応じて Materials タブでテクスチャを再割り当て |
ポイント:スケールが正しく設定されていないと、Rigidbody の質量やコリジョンサイズが期待とずれ、ゲーム内で「浮く」・「沈む」などの不具合が発生します。
2. PhysX(Rigidbody & Collider)の基本設定
以下は エディタ拡張 を利用した自動設定スクリプトです。手作業で同じ設定を繰り返す手間を削減できます。ただし、エディタ拡張は開発者向けの機能なので、ビルドに含めないよう Editor フォルダに配置してください。
|
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 |
// Assets/Editor/PhysXSetup.cs using UnityEngine; using UnityEditor; public static class PhysXSetup { [MenuItem("Bonelab/Apply Default Physics")] private static void ApplyDefaultPhysics() { foreach (var go in Selection.gameObjects) { // Rigidbody の自動付与 if (!go.TryGetComponent<Rigidbody>(out var rb)) { rb = go.AddComponent<Rigidbody>(); rb.mass = 1f; rb.drag = 0.05f; rb.angularDrag = 0.05f; } // Collider(MeshCollider が Convex の場合のみ) if (!go.TryGetComponent<Collider>(out var col)) { var meshCol = go.AddComponent<MeshCollider>(); meshCol.convex = true; } } } } |
手動で設定する場合の目安
- Mass(質量):1 kg が標準。重い武器は 2~3 kg に調整
- Drag(空気抵抗):0.05 → 高速移動時の減速を抑える
- Collider の種類:MeshCollider (Convex) が最も汎用的だが、パフォーマンスが問題になる場合は Box / Capsule に置き換える
3. シンプル AI スクリプト(Patrol + Chase)
以下のスクリプトは Unity の標準 Update で動作し、CPU 負荷を抑えるために距離判定だけを行います。BONELAB のフレームレートが 90 fps 前後であることを考慮しています。
|
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 37 38 39 40 41 42 43 44 45 46 47 48 49 |
using UnityEngine; using Bonelab.Modding; // 正しい名前空間へ置き換えてください [RequireComponent(typeof(Rigidbody))] public class SimpleNPC : MonoBehaviour { [Header("Patrol Settings")] public Transform[] waypoints; public float patrolSpeed = 1.5f; [Header("Chase Settings")] public float chaseRange = 4f; public float chaseSpeed = 3f; private int _currentIdx; private Transform _playerCam; private Rigidbody _rb; void Awake() { _rb = GetComponent<Rigidbody>(); _playerCam = Camera.main.transform; // VR カメラ } void Update() { var distanceToPlayer = Vector3.Distance(transform.position, _playerCam.position); if (distanceToPlayer < chaseRange) ChasePlayer(); else Patrol(); } private void Patrol() { if (waypoints == null || waypoints.Length == 0) return; var target = waypoints[_currentIdx]; MoveTowards(target.position, patrolSpeed); if (Vector3.Distance(transform.position, target.position) < 0.2f) _currentIdx = (_currentIdx + 1) % waypoints.Length; } private void ChasePlayer() => MoveTowards(_playerCam.position, chaseSpeed); private void MoveTowards(Vector3 destination, float speed) { var direction = (destination - transform.position).normalized; _rb.MovePosition(transform.position + direction * speed * Time.deltaTime); // 視線は常に目的地へ向ける Vector3 lookDir = destination - transform.position; if (lookDir.sqrMagnitude > 0.001f) transform.rotation = Quaternion.LookRotation(lookDir, Vector3.up); } } |
拡張例
- 視界判定に Physics.Raycast を追加し、障害物があるときは回避行動を取らせる。
- アニメーションコントローラと連携させて、歩行 / 走行時のモーションを切り替える。
ローカルテスト・ビルド(PC VR と Quest)
この章では Unity エディタ上でのプレイテストから Android ビルド、Quest デバイスへのデプロイまでの流れを具体的に示します。エラーログの確認ポイントも併記しているので、トラブルシューティングがスムーズになります。
エディタでのプレイテスト(PC)
まずは PC 上でシーンを再生し、基本的な挙動と XR 設定が正しく機能するか確認します。
| 確認項目 | 詳細 |
|---|---|
| XR Plug‑in Management | OpenXR が有効化され、PC (Standalone) 用のプロファイルが選択されているか |
| Input System | Project Settings → Input System Package でデバイスマッピングが正しいか |
| コンソールログ | NullReferenceException・MissingComponentException が出ていないか |
| フレームレート | 90 fps 前後を維持できているか(Profiler で確認) |
ヒント:エディタ上の「Play」中に問題が見つかったら、まずはコンソールの警告・エラーをすべて解消してから次のビルドステップへ進みましょう。
Android ビルド設定(Quest 用)
- プラットフォーム切替
File → Build Settings→ Platform: Android →Switch Platform- Player Settings の主要項目
| 項目 | 推奨値 |
|---|---|
| Scripting Backend | IL2CPP |
| Target Architecture | ARM64 |
| Minimum API Level | Android 23 (6.0) |
| Target API Level | Android 33 (13) |
| Rendering | Universal Render Pipeline(URP) |
| XR Settings | OpenXR を有効、Quest プロファイルを選択 |
- ビルド実行
Buildボタン → 出力先にMyBonelabMod.apkを保存
注意:Android ビルド時は必ず「Development Build」チェックを外し、リリース版の最適化が有効になるようにします。
Quest へのインストール手順
- Oculus アプリでデバイスの 開発者モード をオンにする。
- USB ケーブルで PC と Quest を接続し、
adb devicesコマンドで認識を確認。 - 以下のコマンドでインストール:
|
1 2 |
adb install -r MyBonelabMod.apk |
- インストール後は Quest の「ライブラリ」→「未公開アプリ」から起動できることを確認。
トラブルシューティング
-adbが見つからない場合は、Android SDK Platform‑Tools を再インストール。
- インストールが失敗する場合は、デバイス側の空き容量と「不明なソースからのインストール」設定をチェック。
エラーログの取得と分析
| ログ種別 | 取得方法 | 主なチェックポイント |
|---|---|---|
| Unity Console | エディタ内 Console タブ |
スクリプト例外、シェーダーエラー |
| Android Logcat | adb logcat -s Unity または ODH の「Logcat」ウィンドウ |
JNI エラー、ネイティブライブラリロード失敗 |
| Quest デバイスログ | ODH → “Device Manager” → “View Logs” | クラッシュスタックトレース、メモリ不足警告 |
エラーが出たら まずはコンソールの行番号 を確認し、該当スクリプトをデバッグ。Android Logcat はフィルタリングして Unity 関連だけを表示すると見やすくなります。
MOD のパッケージ化・配布、リリース後の運用
完成したビルドをユーザーに届けるまでの流れと、継続的に品質を保つためのバージョン管理・フィードバック対応策をまとめます。mod.io と Monke Mod Manager を組み合わせることで、アップデート配信が自動化できます。
パッケージ作成(ZIP)
- Unity で Export Package:
Assets/Mods/MyCustomNPC/**を選択しMyCustomNPC.zipとして保存。 - ZIP のルートに必ず manifest.json を配置。(以下はサンプル)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "name": "MyCustomNPC", "version_number": "1.0.0", "website_url": "", "description": "Simple patrol NPC for BONELAB (PC & Quest).", "dependencies": [ { "mod_id": "bonelab_sdk", "required_version": "0.3.7-1852" } ] } |
ポイント:
version_numberは SemVer(MAJOR.MINOR.PATCH)形式で管理し、リリースごとに必ずインクリメントしてください。
mod.io へのアップロード手順
- mod.io にログイン → 「Create Mod」ボタンをクリック。
- 必須項目を入力:Title(例
MyCustomNPC)、Description、Tags(BONELAB, NPC, VR, Quest)など。 - Thumbnail は 512×512 ピクセル以上の PNG を用意。
- 「File Upload」欄に先ほど作成した
MyCustomNPC.zipをドラッグ&ドロップし、Submit。
アップロード後は自動的にモジュールが検証され、問題なければ「公開」状態になります。
バージョニングと依存関係の管理
- MAJOR:SDK の破壊的変更や互換性が失われた場合。
- MINOR:新機能追加・既存機能拡張(後方互換)。
- PATCH:バグ修正・小さな最適化。
manifest.json の dependencies 配列に公式 SDK のバージョンを明示すると、Monke Mod Manager が自動で依存関係を解決し、ユーザー側の手間が減ります。
実務上のコツ:リリースノートは必ず mod.io の「Release Notes」欄に記載し、変更点を箇条書きで分かりやすく提示すること。
更新手順とユーザーからのフィードバック対応
- 修正・機能追加 が完了したら新バージョン(例
1.0.1)の ZIP と manifest を作成。 - mod.io の対象 MOD ページで「New Version」→ ファイルと manifest アップロード → リリースノート記入 → 「Publish」。
- フィードバック回収
- mod.io の Discussion タブでユーザーコメントを定期的にチェック。
- 重要なバグは GitHub Issues(公開リポジトリがある場合)へ転記し、進捗状況をステータス更新。
- 要望や改善案は次回の TODO リスト に追加し、ロードマップとして公開すると信頼感が向上。
ベストプラクティス:リリースごとに「変更点」「既知の問題」「次期予定」を明示した短いドキュメント(README など)を添付すると、ユーザーが情報を探しやすくなります。
まとめ
- 環境構築 は公式推奨スペックに沿った Windows PC と、Unity 2022.3 LTS + OpenXR の組み合わせが最も安定しています。
- SDK のインポート 時は名前空間や依存関係を必ず確認し、エディタ拡張で物理設定の自動化を活用すると作業効率が上がります。
- NPC / 武器制作 はスケール調整 → PhysX 設定 → シンプル AI スクリプトという流れで段階的に進め、テストは PC エディタと Quest の両方で行うことが重要です。
- ビルド・デプロイ は Android ターゲット設定を正しく行い、Logcat と Unity Console を併用したエラーログの分析でトラブルを早期に発見します。
- 配布と運用 では mod.io の manifest.json に SemVer バージョンと依存情報を明記し、リリースノートとフィードバックループを整備することで、長期的に信頼される MOD 制作者になることができます。
最終チェックリスト
1. OS・ハードウェアは公式推奨スペックを満たしているか。
2. Unity と BONELAB SDK のバージョンが最新であるか(公式サイトで確認)。
3. XR Plug‑in Management が OpenXR + Quest プロファイルで有効化されているか。
4. モデルのスケール、Rigidbody・Collider 設定を忘れずに行ったか。
5. ビルド後は必ず Logcat と Unity Console の両方でエラーチェック。
6. 配布時は manifest.json のバージョン番号と依存情報が正しいか。
これらを順守すれば、安定した BONELAB MOD の開発・公開が実現できます。 Happy Modding!