
こんにちは!今回は VRで遊べるバッティングゲーム を作る方法を解説します。
VR初心者の方でも 「飛んでくるボールをバットで打ち返す」 という基本的なゲームを作れるように、一つずつ丁寧に説明していきます!
このチュートリアルでは UnityとMeta Quest(Oculus Quest) を使い、VRの基礎からゲーム制作の流れまでしっかり学べるようになっています。
最終的には、 右手のコントローラーを振るとバットが連動し、飛んできたボールを打ち返せる シンプルなバッティングゲームを作ります!
1. はじめに
- この記事の目的
- 🛠 必要な環境
- 最終的に作るゲームの概要
- 目標
- Unityプロジェクトの作成
- VR開発に必要なパッケージをインストール
- バットを作る(Unity内で簡単なモデルを作成)
- ボールを発射する
- ボールを飛ばすスクリプト
- バットでボールを打てるようにする
- この記事でやること
- 事前準備
- 1. PC上での動作確認
- 2. VRデバイスでのテスト
- 3. よくあるトラブルと対処法
- この記事でやること
- 1. XR Interaction Toolkit でコントローラーの動きを取得
- 2. 実際にバットを振ってみる
- 3. よくあるトラブルと対処法
- この記事でやること
- 1. ボールを発射するスクリプトを作成
- 2. ボールを打ってみる
- 3. よくあるトラブルと対処法
- この記事でやること
- 1. バットを作る
- 2. ボールがバットに当たったら飛ぶスクリプトを作成
- 3. 設定を調整して動作確認
- 4. よくあるトラブルと対処法
- 1. ビルドの準備
- 2. ビルド設定を調整
- 3. ゲームをビルドする
- 4. もし動かない場合(トラブルシューティング)
- 1. ここまでの振り返り
- 2. 今後の改良点
- 3. 今後の発展
- 4. まとめ
この記事の目的
このチュートリアルでは、次のようなスキルが身につきます:
Unityの基本操作 (プロジェクトの作成・モデルの配置・物理エンジンの使い方)
VR開発の基礎 (XR Interaction Toolkitを使ってコントローラーとバットを連動)
ゲームシステムの作り方 (ボールの発射・バットの当たり判定)
Meta Questで動くVRアプリのビルド方法
ゲームを作りながら、 VR開発の流れ も学べるので、将来的に もっと本格的なVRゲームを作りたい! という方の第一歩にもなります。
🛠 必要な環境
1. PC(Windows)
VR開発にはそれなりのPCスペックが必要です。
最低限のスペックの目安は次のとおりです:
項目 | 推奨スペック |
---|---|
OS | Windows 10 / 11 |
CPU | Intel Core i5 以上(Ryzen 5 以上) |
メモリ | 16GB以上 |
GPU | GTX 1060 以上(RTX推奨) |
ストレージ | SSD推奨(HDDでも可) |
※ Macでも開発できますが、Meta Quest向けにビルドする場合は Windowsが推奨 されます。
2. Meta Quest(Oculus Quest)
このチュートリアルでは、 Meta Quest 2 / 3 を使用します。
今回作ったゲームはスタンドアロン(PCなし)でQuest単体で動かすこともできます!
ただし、この記事では PCと接続したまま開発する方式(PCVR) で進めます。
3. Unity
Unity は無料で使えるゲーム開発エンジンで、VR開発にも対応しています!
今回使うバージョンは Unity 2022.3.25f1 です。
▶ Unityのダウンロードはこちら
🔗 https://unity.com/ja/download
最終的に作るゲームの概要
ゲームの内容
- 目の前からボールが飛んでくる 🚀
- コントローラーを振ると、バットでボールを打てる ⚾
この記事の流れ
このチュートリアルでは、 PCとMeta Questを使って開発する方法 を ゼロから解説 します。
これから学ぶこと
- Unityの準備 → Unityをインストールし、VR開発の環境を作る
- VRとコントローラーの設定 → コントローラーでバットを動かせるようにする
- ゲームの基本を作る → ボールを発射・バットで打つ
- ビルドして遊ぶ! 🎮
2. Unityの準備
VRバッティングゲームを作るには、まず Unityの環境を準備 する必要があります。
このステップでは、 Meta Quest用のVR開発環境を整え、ボールを飛ばしてバットで打つ基本システム を作ります。
目標
UnityでVR開発ができる環境を整える
コントローラーを使ってバットを動かせるようにする
飛んでくるボールをバットで打てるようにする
Unityプロジェクトの作成
1. Unity Hubを開く
Unity Hubを開き、 「新しいプロジェクトを作成」 をクリック。
2. テンプレートの選択
- テンプレート: 3D
- プロジェクト名: VR_BattingGame
- 保存場所: 任意のフォルダ(わかりやすい場所に)
- Unityバージョン: 2022.3 LTS 推奨
3. プロジェクトの作成
設定が完了したら 「作成」 をクリック!
(プロジェクトが開くまで少し時間がかかります)
VR開発に必要なパッケージをインストール
VR開発には XR Interaction Toolkit を使います。
これを導入すると、 VRコントローラーでバットを動かせるようになります!
1. パッケージマネージャーを開く
「Window」→「Package Manager」 を開く。
2. XR Interaction Toolkit をインストール
- 左上のドロップダウンから「Unity Registry」を選択
- 検索バーに「XR Interaction Toolkit」 と入力
- 「Install」ボタンをクリック
- 「Starter Assets」も追加でインストール
(コントローラーの設定が楽になります)
3. OpenXRを有効化
- 「Edit」→「Project Settings」→「XR Plug-in Management」 を開く
- 「OpenXR」にチェックを入れる
- 「Android」タブでも同じようにOpenXRを有効化
これでVR開発の準備が完了!
バットを作る(Unity内で簡単なモデルを作成)
今回は バットの3DモデルをUnity上で作成 します。
1. バットのオブジェクトを作成
- 「Hierarchy」で右クリック →「3D Object」→「Cylinder」を選択
- 名前を「Bat」に変更
- 「Scale」を変更してバットっぽい形にする
- X: 0.2
- Y: 1.2
- Z: 0.2
2. コントローラーにバットを追従させる
- 「Bat」を「Right Controller」の子オブジェクトにする
- コントローラーを動かすとバットが一緒に動くようになる!
ボールを発射する
ボールが飛んできて、バットで打てるようにしましょう!
1. ボールのオブジェクトを作成
- 「Hierarchy」で右クリック →「3D Object」→「Sphere」を選択
- 名前を「Ball」に変更
- 「Scale」を調整してボールの大きさを決める
- X: 0.2
- Y: 0.2
- Z: 0.2
2. Rigidbody を追加
ボールが物理演算で動くようにします!
- 「Ball」を選択
- 「Inspector」→「Add Component」→「Rigidbody」を追加
- 設定を変更
- Use Gravity: ✅(オン)
- Mass(質量): 0.1(軽くする)
- Drag(空気抵抗): 0.05(少し減速するように)
ボールを飛ばすスクリプト
ボールを飛ばすには スクリプトが必要 です!
「BallLauncher」というスクリプトを作り、一定間隔でボールが発射されるようにします。
1. スクリプトを作成
- 「Assets」→「Create」→「C# Script」
- 名前を「BallLauncher」に変更
- 以下のコードをコピペ!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BallLauncher : MonoBehaviour
{
public GameObject ballPrefab;
public Transform spawnPoint;
public float launchForce = 10f;
public float spawnInterval = 3f;
private float timer = 0f;
void Update()
{
timer += Time.deltaTime;
if (timer >= spawnInterval)
{
LaunchBall();
timer = 0f;
}
}
void LaunchBall()
{
GameObject ball = Instantiate(ballPrefab, spawnPoint.position, spawnPoint.rotation);
Rigidbody rb = ball.GetComponent<Rigidbody>();
if (rb != null)
{
rb.AddForce(spawnPoint.forward * launchForce, ForceMode.Impulse);
}
}
}
2. ボールを発射する位置を決める
- 「Hierarchy」で右クリック →「Create Empty」
- 名前を「BallSpawnPoint」に変更
- 適切な位置に移動(ピッチャーの投げる位置)
- 「BallLauncher」の「spawnPoint」に「BallSpawnPoint」を設定
バットでボールを打てるようにする
バットに物理判定を追加し、ボールに当たると飛ぶように します!
1. バットにRigidbodyを追加
- 「Bat」を選択
- 「Inspector」→「Add Component」→「Rigidbody」
- 設定を変更
- Use Gravity: ❌(オフ)
- Is Kinematic: ✅(オン)
2. バットにColliderを追加
- 「Bat」を選択
- 「Inspector」→「Add Component」→「Capsule Collider」
- サイズを調整してバットの形に合わせる
3. ボールのスクリプトを作成
ボールがバットに当たると 飛んでいく ようにします。
スクリプトを作成
- 「Assets」→「Create」→「C# Script」
- 名前を「BallController」に変更
- 以下のコードをコピペ!
using UnityEngine;
public class BallController : MonoBehaviour
{
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Bat"))
{
Rigidbody rb = GetComponent<Rigidbody>();
Vector3 hitDirection = (transform.position - collision.transform.position).normalized;
rb.velocity = hitDirection * 10f;
}
}
}
3. VRデバイスで動作確認する
この記事でやること
ここでは、作ったVR野球ゲームが実際にVRデバイス(Meta Quest)上で正しく動作するか確認する方法を解説します。PC上でのテストとVRヘッドセットでのテストの両方を行います。
事前準備
- Meta QuestをPCに接続(LinkまたはAir Link)
- Unityの設定を確認(XR Interaction Toolkitが適用されているか)
- VRコントローラーの認識をチェック
1. PC上での動作確認
まずはPC上でUnityエディタの Playモード を使って、基本的な動作を確認します。
確認すべきポイント
- ゲームシーンが正しく表示されているか
- コントローラーを振るとバットが連動して動くか
- ボールが発射され、バットに当たると跳ね返るか
もし動作しない場合
- バットが動かない → XR Interaction Toolkit の設定を確認
- ボールがバットをすり抜ける → コライダーや物理マテリアルの設定を確認
2. VRデバイスでのテスト
① Meta QuestとPCを接続する
【Meta Quest Linkを使う場合】
- Quest本体をPCにUSBで接続
- Meta Quest Link を有効化(設定→Quest Link)
- UnityのGameビューにVRの映像が映るか確認
【Air Linkを使う場合】
- QuestとPCを 同じWi-Fiネットワーク に接続
- Questの設定で Air Link を有効化
- Air Link経由でPCの画面を映す
② VR内で動作を確認
- ヘッドセットをかぶり、 右コントローラーを動かしてバットが追従するか 確認
- ボールが飛んでくるか 確認
- バットで打てるか 確認
3. よくあるトラブルと対処法
❌ コントローラーが動かない
→ XR Interaction Toolkit の Input Action 設定を見直す
❌ ボールがすり抜ける
→ Rigidbody の Collision Detection を “Continuous” に設定
❌ ゲームがVR上に映らない
→ Project Settings > XR Plug-in Management で Meta Questが有効になっているか確認
4. バットとコントローラーを連動させる
この記事でやること
VRコントローラーを動かすと、バットがそれに合わせて動くようにします。
XR Interaction Toolkit を活用して、自然なスイングを実現します。
1. XR Interaction Toolkit でコントローラーの動きを取得
必要な準備
- コントローラーの位置・回転情報を取得
- バットをコントローラーに追従させる
- バットの動きに遅延がないか確認する
① コントローラーの位置情報を取得
コントローラーの位置と回転をリアルタイムで取得するには、 XR Controller (Action-based) を使用します。
- Right Controller(右手のコントローラー)を Hierarchy 内で探す
- XR Controller (Action-based) コンポーネントがついているか確認
- Position Action と Rotation Action が XRI RightHand/Position や XRI RightHand/Rotation に設定されているか確認
② バットをコントローラーに追従させる
次に、スクリプトを作成し、バットの位置と回転をコントローラーと連動させます。
🎮 BatController.cs
using UnityEngine;
public class BatController : MonoBehaviour
{
public Transform controllerTransform; // コントローラーのTransform
void Update()
{
if (controllerTransform != null)
{
// バットをコントローラーの位置・回転に追従させる
transform.position = controllerTransform.position;
transform.rotation = controllerTransform.rotation;
}
}
}
👆 バットのTransformを、毎フレームごとにコントローラーと同期させています!
2. 実際にバットを振ってみる
確認するポイント
- コントローラーを動かすと バットも同じように動くか
- スイング時にバットが遅れたりしないか
3. よくあるトラブルと対処法
❌ バットがコントローラーからズレる
→ コントローラーの子オブジェクトにバットを設定してみる
- Right Controller の下にバットをドラッグ&ドロップ
- スクリプトなしでも動くか確認
5. ボールを飛ばす
この記事でやること
ゲームの基本である ボールを発射する機能 を作成します!
ボールが投げられ、バットで打つことができるようにします。
ボールの発射位置や速度 を設定し、一定間隔で発射 する仕組みを作ります。
1. ボールを発射するスクリプトを作成
必要な準備
- ボールのプレハブを作成
- ボールを投げるスクリプトを作成
- 一定時間ごとにボールを発射
① ボールのプレハブを作成
- ヒエラルキー で
GameObject > 3D Object > Sphere
を作成 - 名前を「Ball」に変更 し、適切なサイズ(例:
0.1, 0.1, 0.1
)に調整 - Rigidbody を追加
Use Gravity
を ONMass
(質量)は0.5
くらいCollision Detection
をContinuous
- Physic Material を設定(跳ね返りの調整)
BallMaterial
を作成Bounciness
(弾性)を0.3
くらいに設定
② ボールを発射するスクリプトを作成
🎮 BallLauncher.cs
using UnityEngine;
public class BallLauncher : MonoBehaviour
{
public GameObject ballPrefab; // ボールのPrefab
public Transform spawnPoint; // ボールの発射位置
public float launchForce = 20f; // ボールの発射力
public float spawnInterval = 3f; // ボールを発射する間隔
private float timer = 0f; // 時間をカウントする変数
void Update()
{
timer += Time.deltaTime; // フレームごとに時間をカウント
if (timer >= spawnInterval) // 一定時間ごとに発射
{
LaunchBall();
timer = 0f; // タイマーをリセット
}
}
void LaunchBall()
{
// ボールを生成
GameObject ball = Instantiate(ballPrefab, spawnPoint.position, spawnPoint.rotation);
// ボールに力を加える
Rigidbody rb = ball.GetComponent<Rigidbody>();
if (rb != null)
{
rb.AddForce(spawnPoint.forward * launchForce, ForceMode.Impulse);
}
// 一定時間後にボールを削除
Destroy(ball, 10f);
}
}
👆 このスクリプトを作ることで、3秒ごとにボールが発射されます!
③ スクリプトを適用する
- ヒエラルキーで
Empty Object
を作成- 名前を “BallLauncher” に変更
- BallLauncher の位置を調整
- バッターから数メートル前方に配置
BallLauncher.cs
をBallLauncher
に追加- Inspector でスクリプトの変数を設定
BallPrefab
→ 先ほど作った Ball プレハブSpawnPoint
→ BallLauncher の TransformLaunch Force
→ 20(後で調整可能)Spawn Interval
→ 3秒ごと
2. ボールを打ってみる
確認するポイント
- ボールが一定間隔で発射されるか
- バットに当たると跳ね返るか
- ボールの速度がちょうどいいか(速すぎず、遅すぎず)
3. よくあるトラブルと対処法
❌ ボールが発射されない
→ BallPrefab の設定を確認
- Rigidbody がついているか
- BallLauncher に Prefab を設定しているか
❌ ボールが遅すぎる / 速すぎる
→ LaunchForce の値を調整
20
→30
にすると速くなる20
→15
にすると遅くなる
6. バットに当たったらボールが飛ぶ
この記事でやること
前回のステップで ボールが発射されるようになりました!
でも今は、バットに当たってもボールの挙動が適当 になっています。
このステップでは、バットに当たるとボールが飛ぶ処理 を追加します!
バットの スイングの方向 を考慮し、自然な打球 になるように調整します。
1. バットを作る
必要な準備
- バットの3Dモデルを作る
- バットに衝突判定(Collider)をつける
- バットがコントローラーに追従するようにする
① バットの3Dモデルを作成
- ヒエラルキーで
GameObject > 3D Object > Cylinder
を作成 - 名前を「Bat」に変更
- サイズを調整
X: 0.1, Y: 0.8, Z: 0.1
くらいにするとバットっぽくなる
- Material(色)を設定
Assets
でMaterial
を作成し、茶色などに変更
② バットに衝突判定を追加
- Inspector で
Capsule Collider
を追加Is Trigger
は OFF
- Rigidbody を追加
Use Gravity
→ OFFIs Kinematic
→ ON
③ コントローラーと連動させる
- ヒエラルキーで
Empty Object
を作成- 名前を “BatHolder” に変更
- BatHolder を
Right Controller
の子オブジェクトにする - Bat を
BatHolder
の子オブジェクトにする - BatHolder の Transform を調整して、手に持ったとき自然な位置になるようにする
2. ボールがバットに当たったら飛ぶスクリプトを作成
追加すること
- バットに当たったらボールが飛ぶ
- バットのスイングの向きを考慮して飛ぶ
- ボールが速く飛ぶようにする
① バットのスクリプトを作成
🎮 BatController.cs
using UnityEngine;
public class BatController : MonoBehaviour
{
public float hitForce = 10f; // ボールに与える基本的な力
public AudioClip hitSound; // バットがボールに当たったときの音
private AudioSource audioSource; // 音を再生するためのコンポーネント
private void Start()
{
// AudioSourceを追加
audioSource = gameObject.AddComponent<AudioSource>();
}
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Ball")) // ボールと衝突したら
{
Debug.Log("ボールがバットに当たりました!");
// 音を再生
if (hitSound != null && audioSource != null)
{
audioSource.PlayOneShot(hitSound);
}
// ボールのRigidbodyを取得
Rigidbody ballRigidbody = collision.gameObject.GetComponent<Rigidbody>();
if (ballRigidbody != null)
{
// バットの移動方向(スイングの向き)を計算
Vector3 batVelocity = GetComponentInParent<Rigidbody>().velocity;
// ボールにバットの速度を加えて飛ばす
ballRigidbody.velocity = batVelocity * hitForce;
}
}
}
}
👆 このスクリプトをバット(Bat オブジェクト)に追加します!
3. 設定を調整して動作確認
確認するポイント
- ボールがバットに当たったら飛ぶか
- バットを振る方向でボールの飛び方が変わるか
- ボールが適切な速度で飛ぶか
4. よくあるトラブルと対処法
❌ ボールが飛ばない
→ バットに Rigidbody が設定されているか確認
Is Kinematic
を ON にする
❌ バットの当たり判定がうまくいかない
→ ボールとバットの Collider 設定を確認
Capsule Collider
とSphere Collider
が正しく設定されているか
7. Windows向けにビルド
この記事でやること
前回までに ボールを打つVR野球ゲーム を作成しました!
でも、今は Unityエディタ上でしか動作しません
このステップでは、Windows向けにゲームをビルドして、PC上で実行できるようにします!
1. ビルドの準備
まずは、ゲームをビルドする前に 必要な設定を確認・調整 しましょう
① シーンを保存
保存しないとビルドに反映されないことがあるので注意!
- Unityの上部メニュー →
File
→Save
をクリック MainScene
など分かりやすい名前をつけて保存
② Windows向けにプラットフォームを変更
- Unityの上部メニュー →
File
→Build Settings
を開く Platform(プラットフォーム)
のリストでWindows(PC, Mac & Linux Standalone)
を選択- 「Switch Platform」 をクリック(少し時間がかかる)
→ プラットフォーム変更が完了すると、アイコンが Windows に切り替わる
③ シーンをビルドに追加
Scenes In Build
のリストを確認- 現在のシーンが含まれていなければ「Add Open Scenes」 をクリックして追加!
→ 追加しないとゲームがビルドされないので注意
2. ビルド設定を調整
① プレイヤー設定(Player Settings)
Build Settings
の左下にある 「Player Settings…」 をクリック- 「Player」タブ を開く
- 以下の設定を変更する
設定項目 | 推奨値 | 説明 |
---|---|---|
Product Name | VR Baseball | ゲームの名前 |
Company Name | YourName | 自分の名前やチーム名 |
Resolution and Presentation | 1920×1080 | 解像度設定 |
Fullscreen Mode | Windowed | ウィンドウモード(フルスクリーンでもOK) |
✅ これでゲームの基本設定は完了!
3. ゲームをビルドする
① ビルドフォルダを指定
Build Settings
画面で 「Build」 をクリック- 保存先のフォルダ を選択(例:
VRBaseball_Build
) - 「フォルダを選択」ボタンを押してビルド開始!
少し待つと、.exe ファイルが作成されます
② ビルドしたゲームを起動
- ビルドしたフォルダを開く
VRBaseball.exe
を ダブルクリック!- VRデバイスが接続されていれば、ゲームがPC上で動作する! 🎉✨
4. もし動かない場合(トラブルシューティング)
❌ ゲームが起動しない!
✅ 解決策
Data
フォルダが.exe
ファイルと同じフォルダにあるか確認- Windows Defender にブロックされていないか(ブロックされたら「詳細情報」→「実行」)
❌ VRデバイスが動かない!
✅ 解決策
- Oculus Link / Air Link を有効にする
- QuestがPCに正しく接続されているか確認
- SteamVRが必要な場合は起動しておく
❌ ボールが表示されない!
✅ 解決策
Scenes In Build
に 現在のシーンを追加したか確認- Player Settings の設定ミスがないか確認
8. まとめ
この記事でやること
ここまでのステップで VR野球ゲームを完成させ、Windows向けにビルド しました! 🎮✨
このステップでは、作成したゲームの振り返りと、今後の改良点や発展の方向性 についてまとめます。
1. ここまでの振り返り
✅ VR野球ゲームをゼロから開発
✅ Meta QuestとPCを接続して動作確認
✅ バットをコントローラーに連動
✅ ボールを発射し、バットで打ち返せるようにした
✅ Windows向けにビルドして、PC上で実行可能にした
この一連の流れを通じて、Unityを使ったVRゲーム開発の基本 を学ぶことができました! 🎉
2. 今後の改良点
このゲームはまだ シンプルなバッティング練習ゲーム ですが、今後さらに改良することで より面白いゲーム にできます!
🛠 追加すると面白くなる機能
- 打球の飛距離や角度を計算し、スコアを表示
- ホームランエフェクトやスローモーション演出を追加
- ピッチャーを追加し、さまざまな球種を投げるようにする
- ボールの速さや飛び方を調整し、よりリアルな挙動にする
3. 今後の発展
このプロジェクトを通じて VR開発の基礎 を学びましたが、次のステップとして、さらに高度な技術に挑戦する こともできます。
新しい技術にチャレンジ!
- AR版の野球ゲームを作ってみる(現実の空間でプレイ可能に!)
- ネットワーク対戦を実装し、他のプレイヤーと競えるようにする
- AIピッチャーを導入し、対戦モードを作る
VRは今後も進化し続ける分野なので、最新の技術を取り入れて、より没入感のあるゲームを作る ことが可能です!
4. まとめ
これで VR野球ゲームの作り方 の解説は終了です!
このチュートリアルを通じて、Unityの基本、VR開発の流れ、ボールの物理挙動の制御、ビルド方法 まで一通り学ぶことができました ✨
このゲームをさらに改良して、よりリアルなバッティング体験ができるゲームを目指していきましょう!
👨💻 この記事を読んでVRゲーム開発に興味を持った方は、ぜひ次のステップに挑戦してください!

🎉 最後まで読んでいただき、ありがとうございました!
次は、あなたのオリジナルVRゲームを作る番です! 🚀🔥
コメント