UnityでMeta Quest2向けのVRアプリを作った
はじめに
年末にQuest2を購入して、いろんなアプリで遊んでいましたが、自分でも作ってみたくなり、チュートリアルを参考にVRアプリを作成しました。
完成したのはただボールを追いかけるだけのクソゲーです。
急にVRアプリを開発したくなったので、Oculusの公式チュートリアルをベースに動く球を追いかけるゲームを作りました。移動と球を動かすスティックが同じなので、動きが読めないクソゲーです。動画はQuest2実機で動かしたときの様子。 pic.twitter.com/Vkhjw4SNvH
— snova301 (@TiuapB1nIiPFQJD) 2022年4月15日
開発環境
項目 | 名称 |
---|---|
ハード | M1 macbook air |
OS | macOS Monterey 12.3.1 |
Unity |
2019.4.31f1 |
エディター | vscode |
製作手順
基本的には公式チュートリアル通りに進めたら完成しました。
とは言いつつも、いくつか躓くところがありました。
- 公式チュートリアル通りにちゃんと設定しよう。
- macでは実機でデバッグする必要があります。
- 日本語のチュートリアルのスクリプトがミスってます。公式チュートリアルの英語版では問題ないのでスクリプトのコピーはそちらから。参考サイト
- Quest2を開発者モードにするためには組織名が必要だったので、適当に作りました。
- テキストが表示されない
なお、macOSだとandroid studioが入っていれば基本的に何もせずに実機デバッグできます。
改良してみる
公式チュートリアルだけでは面白くないので、修正を加えてみます。
カメラを360°表示できるようにし、壁の中を歩き回れるようにします。
まず、oculus interglation
アセットをUnity Asset Storeから導入。
UnityのWindow > Package Manager
でダウンロードとプロジェクトへのインポートをし、Oculus/VR/Prefabs/OVRPlayerControll
をシーンへ配置します。
OVRPlayerController
のPosition
を(0, 0, 5)に設定します。
OVRCameraRig
のPosition
をチュートリアルと同様に(0, 10, -20)に設定します。
そして、デバッグ開始しましたが、以下のエラーにて起動せず。
Assets/PlayerController.cs(6,14): error CS0101: The namespace '<global namespace>' already contains a definition for 'PlayerController'
どうやらPlayerController
が何かと被っているらしいので、適当にnamespace
を追記しました。
以下はPlayerController
のスクリプト全文です。
using System.Collections; using System.Collections.Generic; using UnityEngine; namespace NamePlayerController{ public class PlayerController : MonoBehaviour { // Appears in the Inspector view from where you can set the speed public float speed; // Rigidbody variable to hold the player ball's rigidbody instance private Rigidbody rb; // Called before the first frame update void Start() { // Assigns the player ball's rigidbody instance to the variable rb = GetComponent<Rigidbody>(); } // Called once per frame private void Update() { // The float variables, moveHorizontal and moveVertical, holds the value of the virtual axes, X and Z. // It records input from the keyboard. float moveHorizontal = Input.GetAxis("Horizontal"); float moveVertical = Input.GetAxis("Vertical"); // Vector3 variable, movement, holds 3D positions of the player ball in form of X, Y, and Z axes in the space. Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical); // Adds force to the player ball to move around. rb.AddForce(movement * speed * Time.deltaTime); } } }
そして、デバッグを再開するとうまく実行できました。
おわりに
アセット使えばとても簡単にVRアプリ開発ができます。 UnityやVRは全く扱ってこなかったジャンルですが、このアプリは作るのに半日程度で済みました。
XR系は実務でも使えそうなので、夢が膨らみますね。