【Unity VR 開発】ブロックの複製とハンドトラック
VR初心者向けにMeta Questのセットアップ方法を解説。初期設定からトラブル対処まで分かりやすく紹介します。

はじめに
Unity VR 開発について解説します!
UnityでMeta Quest 3sを使って開発をしていきます。
セットアップはかなり省いているので、他のサイトを見ながらセットアップはお願いします。
説明では画像を多用していきます!
Unityのプロジェクト作成
プロジェクトから右上の「新しいプロジェクト」を選択する。

「Universal3D」を選択肢プロジェクト名を設定し、
「プロジェクトを作成」を押す。

設定
「File」から「Build Profiles」を開く。
上の「Android」を選択肢「インストールする」。

押すと下の画面になる。
「続行する」を押し、次に同意をしてインストールをする。

インストールが終わったら、一度プロジェクトを開き直す。
そして、「Build Profiles」の「Switch Platform」を押す。

Meta XR SDK all in oneの追加
「Window」タブを選択し、「Package Management」の中の「Aseet Store」を押す。

AseetStoreで「Meta XR All-in-One SDK」を選択し、青のボタンを押してUnityの「My Aeets」に飛ぶ。
そして、My Aseets内の「Install」を押す。

インストールが終わるとunityの右下に「Fix All」と出てくるので押す。
次にPackage Managerの「Unity Registry」内で「OpenXR Plugin」をインストールする.

「Edit」タブから「Project Settings」を開き、「Meta XR」を選択し、 「Fix All」を押す。
「Fix All」が画面に出てきたときは「Fix All」をとりあえず押してください。
オブジェクトの追加
「Meta XR Tools」タブを選択し、「Building blocks」を開くと次のような画面が出てくる。

下の「All Building Blocks」を選択し、「Camera Rig」の右下のボタンを押す。
すると「Hierarchy」タブに「[BuildingBlock] Camera Rig」が追加される。
ここで「Main Camera」はいらないので削除しておく。

「Building blocks」で「Controller Tracking」と「Interaction Rig」を追加する。
次に「GameObject」タブを選択し、「3D Object」から「Cube」を選択する。
すると 「Hierarchy」にCubeが追加される。
Cubeの「Inspector」の「Add Component」を押し、「Rigidbody」を追加する。
Cubeの「Inspector」の「Add Component」を押し、「Grabbable(Script)」を追加する。

ここで、CubeをProjectにドラッグしておく。
ボタンの追加
「GameObject」で「UI(Canvas)」の「Button - TextMeshPro」を追加する。

下のウィンドウが出てきたら上を押す。
次に下も押す。

「GameObject」で「Interaction SDK」を押しす。
「Add Ray Interaction to Canvas」を選択

すると下のように出てくるので「Fix」を押し、「Create」を押す

同じように「GameObject」で「Interaction SDK」を押し、「Add Poke Interaction to Canvas」を選択
「Fix」が出てきたら「Fix All」を押す。
そして、「Create」する。

Canvasの中身は下のようにする。

スクリプト作成
「GameObject」タブから「Create Empty」を追加する。
すると、「GameObject」がHierarchyの中に追加される。
「GameObject」の名前を「GameManager」とした。
GameManagerのinspectorの「Add Component」を押し、「New script」を押す。
名前は何でもいいが「DropCubeController」とし、そのまま保存する。

DropCubeController.csのコードは以下のようにする。
using UnityEngine;
public class DropCubeController : MonoBehaviour
{
public GameObject cubePrefab;
public Transform spawnPoint;
public void DropCube()
{
if (cubePrefab == null || spawnPoint == null)
{
Debug.LogError("CubePrefab または SpawnPoint が設定されていません。");
return;
}
GameObject cube = Instantiate(cubePrefab, spawnPoint.position, Quaternion.identity);
Rigidbody rb = cube.GetComponent<Rigidbody>();
if (rb == null)
{
rb = cube.AddComponent<Rigidbody>();
}
rb.linearVelocity = Vector3.zero;
rb.angularVelocity = Vector3.zero;
Debug.Log("click");
}
}
また「GameObject」タブから「Create Empty」を追加する。
次は「GameObject」の名前を「SpwnPoint」とする。
「SpwnPoint」の位置を次のようにする。
これで自分の位置より少し奥側の上に2m高いところに、ブロックをスポーンさせるようにする。

「GameManager」の「Inspector」に戻って「DropCubeController」を下のようにする。
それぞれ「Hierarchy」からドラッグしてくる。

「Canvas」の「botton」の「On Click()」でプラスを押す。
そして「None(Object)」にHierarchyの「GameManager」をドラッグする。
「No Function」を押し下の画像のように「DropCube()」を選ぶ。


床としてpaneを追加しておくことをおすすめします。
VR上で実行
まず保存する。
MetaQuest 3 または 3S で実行するときは、「File」の「Build profiles」の一番下の「Android」から「Run Device」を変更してください。

そして「Build And Run」を押し適当な名前をつけて保存すると実行することができます。ここで時間が多くかかります。
Unity VR 開発ができました!
実行すると下のようにできます!
まとめ
今回はgeminiやchatgptを活用して作成しました。
unityでのvr開発はかなり時間はかかりますが、ものはできてよかったです。
また、応用も考えているのでみなさんも作ってみてください!
