この記事はNTTコムウェア Advent Calendar 2023 1日目の記事です。
はじめに
NTTコムウェアの掛内です。
今年は翔泳社様から動かして学ぶ!Flutter開発入門を出版させて頂いたり、生成系AIで画像や文章を作っていたりしたので、これらのネタにしようかとも思ったのですが、約2ヶ月前にMetaQuest3が発売され、新しいおもちゃを手に入れてしまったので、MetaQuest3もUnityも使ったことが無いのですが、MR(複合現実)についての記事を書いてみたいと思います。
デモ
まず、最初に今回作成したもののデモをお見せしたいと思います。
※Qiitaに直接動画を埋め込めないため、Xへのリンクとなっております。
複合現実を使って、自分の部屋に球や立方体をたくさん発射して一杯にしてみました!
今回は、これを何もない状態から作っていきたいと思います!!
基本用語
まず、基本的な用語を確認します。
MR
MRはMixed Realityの略で、複合現実と呼ばれます。
MRは、現実空間上に仮想空間のオブジェクトなどを配置する技術で、現実と仮想の両方が複合されて可視化されます。
実現には、MRに対応したヘッドセットを用います。ヘッドセットが現実世界の空間の形状を認識し、ホログラムを合成して投影することで実現します。
似たような技術にVRとARがありますが、MRはVRとARを組み合わせた中間のような位置づけです。
- VR(Virtual Reality) : 仮想現実
- 現実世界の情報は利用せずに、仮想空間を作りその中で情報を可視化します。
- AR(Augmented Reality):拡張現実
- 現実世界をベースに、情報の付与を行います。
MetaQuest
MetaQuestは、Meta社が開発したVRヘッドセットです。
MetaQuestには、MetaQuest2、MetaQuest3、MetaQuestProという種類があり、公式サイト で比較情報が提供されています。
MetaQuest3は2023/10/10に発売され、MetaQuest2と比べてMR機能が大幅に強化されています(もちろんVRも使えます)。
MetaQuestには、パススルー(周囲の環境をリアルタイムに見ることができる機能)があり、これを使い現実世界の情報をヘッドセットに投影し、なおかつホログラムを合成することで、MRが実現できます。
Unity
Unityは、UnityTechnologiesが開発しているゲームエンジンです。2D/3DのゲームをC#を用いて開発することができます。
PC/モバイル/VR・MRデバイスなどのクロスプラットフォームに対応しており、MetaQuestにUnityで開発したアプリケーションをインストールすることで、MRアプリを作ることもできます。
なお、類似製品には、Unreal Engineがあります。
アプリの作成
概要
今回は自身初めてのMRということで、初歩的なところで、MetaQuest3を使って何かオブジェクトを部屋に置けるところを目指しました。具体的には、コムウェアカラーの球と立方体にカウンタを付けて発射し、自分の部屋を何個で一杯にできるかやってみました。
※完成したものは、記事冒頭のXの動画になります。
記事執筆のタイミングにおいて、製品そのものが発売されたばかり、かつ、インターネット上にノウハウが少ない先進的なものを取り扱っているため、最新の正確な情報は、公式サイト等でご確認ください。
1.MetaQuest3を動かす
まず、公式サイトでMetaQuest3を購入します。
※私の場合は、10/20に注文し商品到着予定日が10/31になっていたのですが、10/25に予定より早く届きました。
開封後に、ヘッドセットの初期設定と公式アプリ(Meta Quest)のインストールを行います。購入した箱に、QRコードが付いており「Scanして開始」とありますので、読み込んで表示される手順に従ってセットアップします。
2.開発環境を準備する
まず、UnityHubをダウンロードしインストールします。
その後、UnityHubのサイドメニューのインストールを選択し、「エディタをインストール」をクリックして、Unityをインストールします。
なお、開発時の環境のバージョンは、下記のとおりです。
- UnityHub:3.6.0
- Unity:2022.3.12f1
続いて、スマホアプリの方でヘッドセットの設定から開発者モードを選択し、有効にします。
さらに、MetaQuestの開発者になるために、組織を作成しアカウントと紐づけます。こちらのURLから作成ができます。
なお、Meta Quest Developer Hubを利用すると、ヘッドセットの状況が詳しく確認できるため、インストールしておくと良いかと思います。
3. MetaQuest3とPCをつなぐ
MetaQuest3とPCを繋ぐ方法は、有線(QuestLink)と無線(AirLink)の両方があります。
デスクトップアプリ(Windows)をインストールし、ペアリング画面まで進めたあとに、MetaQuest3側でクイック設定からQuestLink(またはAirLink)を有効にします。
自分の環境ではQuestLinkもAirLinkもどちらも認識がされず、困った状態になりました。
QuestLinkの方では、かろうじてPC側でドライブとしては認識できていたので、接続自体はできていたようでした。
そのため、SideQuest というツールを使って接続とアプリの転送を行いました。
※今回は、本流からそれるためSideQuestについては掘り下げません。
4. Unityでアプリを作る
今回は、ゼロから作るにはあまりに時間がかかりそうだったため、こちらのテンプレートを利用させて頂きました。
Githubからクローンした後に、README.mdに従って、Unityで該当プロジェクトの設定や必要なライブラリのインポートを行います。
元々のプログラムでは、カラフルな無地の球と立方体が飛び出るようになっていますが、下記の修正を入れます。
- 色を指定する
- Assets/App/ObjectLauncher/ObjectLaunchers.csで球と立方体の色をコムウェアのロゴに使われている、白と緑のカラーコードに固定します。
- UnityのColorは、0-255ではなく、0-1でRGBを指定するのに気がつくまで、意図した色がでず一瞬躓きました。
- カウンタの文字を入れる
- TMP(TextMeshPro)を使ってballとCubeに、カウンタの文字を貼ります。
- 緑のオブジェクトには白、白のオブジェクトには緑のカラーコードを指定します。
- 球のカウンタは、きれいに文字を貼るためには曲げたほうが良いのですが、やってみたらそこまで違和感はなかったので、今回は妥協しました。
- ObjectLaunchers.csの中でカウンタを持ち、発射のタイミングでカウンタをインクリメントしてTMPの文字を更新して表示します。
- サイズを変更する
- 小さいとなかなか部屋がいっぱいにならないので、Assets/App/ObjectLauncherのballとCubeのサイズをデフォルトより大きくしました。
5. 動作確認をする
作ったアプリを、Androidアプリ(APKファイル)としてビルドします。
その後、(今回は直接転送ができなかったので)SideQuestを使って、apkファイルをPCからMetaQuest3に転送します。
MetaQuest3側では、アプリライブラリから、提供元不明アプリの該当のアプリを選択すると起動できます。
所感
- MetaQuestやUnityを全く使ったことがなくても、1週間もあればこういうのができることに感動しました
- オブジェクト間や部屋(境界線)との物理演算も思った以上にいい感じ
- 途中QuestLink/AirLinkが使えない部分があるなど、うまく行かない時のトラブルシュートの情報がまだまだ少ないので、困ったときの解決に時間がかかりそう
- VR/MRに慣れていないのか、終わったあとに眼精疲労っぽい症状がたまにでました。
- 単に遊びすぎかもでしれません(笑)
記載されている会社名、製品名、サービス名は、各社の商標または登録商標です。