PLATEAUを活用したMRナビゲーションシステム

20EC119 渡邉愉尊

1 はじめに

1.1 XRの進化とその意義

XRは、現実世界とデジタル情報を融合させる技術として、近年顕著な進化を遂げている。XRは仮想現実(VR)、拡張現実(AR)、複合現実(MR)を包含し、これらはそれぞれ独自の方法でユーザーの現実体験を豊かにしている。VRは完全に仮想的な環境を提供し、ARは現実世界にデジタル要素を重ね合わせ、MRはこれら二つを組み合わせ、よりインタラクティブな体験を生み出している。

VR体験の質を高めるためには、現実世界の情報を詳細に取り込むことが必要不可欠である。現実世界のデータがVR環境に統合されることで、ユーザーはよりリアルな体験を得ることができ、特に教育や訓練の分野での応用が期待される。例えば、VRを使用した医療訓練では、現実の人体の正確なデータが、より効果的な学習経験を提供する。しかし、このような統合は技術的な課題も多く、特にデータの処理能力やリアルタイムのレンダリングが重要な要素となる。

現実の情報を3Dデータとして取り込み、VRで利用する例として、Google Earth for VRがある。Google Earthは、地球の衛星画像、航空写真、GISデータを基にした3D地球モデルを提供するソフトウェアで、街の景観、山々、森林、海など、地球の多様な風景を高解像度で閲覧することが可能である。ユーザーはこのツールを使って、地理的な情報を学習したり、旅行の計画を立てたりすることが主な利用法だが、Google Earth for VRは、Google Earthの仮想現実版であり、VRヘッドセットを使用して、より没入的な体験を提供するアプリケーションである。このアプリケーションでは、ユーザーは3Dの地球を自由に飛び回り、都市や自然の景観を360度の視点で体験することができる。Google Earth for VRは特に、リアルな地理的なデータを基にしたインタラクティブでリアリティーの高い探索を可能にしている。

1.2 PLATEAU[1]

PLATEAUとは、国土交通省が2020年度に開始した、都市デジタルツインの社会実装を目的とした先進的なプロジェクトである。このプロジェクトは、「3D都市モデル」と称される都市空間のデジタルツインデータの整備、活用、そしてオープンデータ化を核としている。PLATEAUの主な目的は、デジタルツイン技術を用いて、都市空間の精密なデジタルレプリカを作成し、これを多様な分野でのサービスやイノベーションの創出に活用することにある。

PLATEAUの特徴としては、都市空間を立体的に視認できることや、立体情報を持った都市空間をサイバー上に再現することで、幅広く精密なシミュレーションが可能となる点、またフィジカル空間とサイバー空間が相互に情報を交換し作用し合うためのプラットフォームを提供できる点が挙げられる。

Google EarthとPLATEAUは、見た目では区別がつかないが、データ規格が大きく異なっている。Google Earthなどの既存の3D地図は一般的に「ジオメトリモデル」と言われているもので、起伏や凹凸の標高値をポイントでとってTINを結んでジオメトリを形成してポリゴンになっていくという作り方で形成されているのに対して、一方PLATEAUのデータは、CityGML形式で建物ごとに情報が纏まっていて、建物の情報についても、ここは病院、ここは住宅と記述されているだけでなく、建築物ごとに材質や築年数の情報が記述されている。これにより、プログラムを書く時に、例えば窓の前で止まる、コンクリートだったら電波が減衰する、ガラスだったら入射角と同じように反射する、というスクリプトを書いて使うことが容易になる。具体的なユースケースとしては、災害リスク情報の3次元表示などがある。[2] この取り組みでは、3D 都市モデルを用いて都市を仮想空間上に再現し、これと併せて災害リスク情報をビジュアライズすることにより、都市スケールで災害リスクとの相互関係を視覚的に理解できるようにしている。例えば、浸水がどれくらいの高さまで迫るのか、どの道路が水没するのか等を、見た人が同じイメージで理解できるため、避難行動に関する共通意識を形成しやすくなる。また防災政策を担当する自治体等にとっても、浸水しない建築物や道路がどこにあるか把握できるため、地区の実情に応じた防災計画の立案が可能となる。また、従来の 2D ハザードマップでは難しかった「垂直避難」施策の検討もより視覚的にわかりやすい形で実施することができるほか、窓やドアの位置、屋内の構造等を再現することにより、屋内外をシームレスに繋ぐ詳細な避難経路等の検討も可能となる。

また仮想オブジェクトとして利用できるため、VRやARを利用したインタラクティブなアプリケーションを作成することで、よりリアルな都市体験が提供できる。具体的なユースケースとしては、現実の街をメタバース空間のプラットフォームとして利用したり、VRゲームのワールドとして利用したりできる。

1.3 本研究の目的

本研究では、Unityを用いてPLATEAUの3D地理モデルを統合し、MetaQuest3のカラーパススルー機能を活用した新たな経路シミュレーションアプリケーションを開発した。このアプリケーションは、ユーザーがHMDを使用し、コントローラーを通じて上空から経路を選択し、選択された経路を3D環境内で自動的に移動するものである。Google MapやGoogle Earthなどの既存の地図アプリでは、現在地を表示したり目的地までの経路を表示したりできることに加えて、ストリートビューで街の様子を詳しく調べることができる一方で、地図を読むことが苦手な人にとって初めて行く場所への案内は十分ではなく、ストリートビューで目的地までの経路を詳しく確認しようとしても、そこで迷子になってしまうことがある。本研究の最終目標は、現実での移動を仮想的に再現して、初めて行く場所でも不安なく移動ができるためのアプリケーションを実現することである。

2 準備

2.1 MRアプリケーションとは

MR(複合現実)は、実際の世界と仮想の世界の要素を組み合わせた体験を提供する技術である。これにより、ユーザーは実世界と仮想世界の境界を越えた新しいタイプのインタラクティブな体験を享受できる。実際に、建設現場での完成イメージの確認や、作業工程を視界に表示することで作業の効率化をしたり、研修やトレーニングの現場で利用したりしている。

本研究のアプリケーションではUnityを使用してMRアプリを制作する。

2.2 PLATEAUの技術的側面[3]

ここでPLATEAUの技術的側面について改めて詳しく説明する。PLATEAUは先述の通り、日本の各都市の地形、建物、道路などの衛星から測定したデータと、行政としての都市データを用いて作られた3Dモデルで、3D都市モデルと呼ばれる。具体的にそれらは基本的に、2DのGIS(地理情報システム)データをもとに作られていて、市町村が都市計画基本図を作る時に使った航空測量成果とこの地図そのものを市町村から借りて、3次元のフットプリントとして作られている。それに加えて、都市計画基礎調査(都市計画法にもとづいて5年に一回程度市町村が実施する法定調査)の情報を属性として付加している。都市計画基礎調査は建物や土地の単位で、建物用途(住宅/商業施設)や構造(木造/鉄筋)、築年、面積平米、建築面積、災害リスクなどの情報を収集したものである。

PLATEAUの3D都市モデルは、CityGML形式ファイルで構成されている。CityGMLは、OGC(Open Geospatial Consortium)で提唱されている、3D都市モデルを扱うための標準的なフォーマットである[4]。またPLATEAUで扱う3D都市モデル固有の仕様は、「3D都市モデル標準製品仕様書[5]」として定められている。この標準製品仕様書では、データフォーマットの他、データの品質やフォルダやファイルの命名規則、データの分割方法なども規定されている。以下は東京23区のCityGML形式データ(13100_tokyo23-ku_2020_citygml_3_2_op.zip)を展開したフォルダ構造の例である。

東京23区のCityGML形式データ

                      13100_tokyo23-ku_2020_citygml_3_2_op
                      ├─13100_indexmap_op.pdf
                      ├─codelists
                      ├─metadata
                      ├─specification
                      └─udx
                          ├─bldg
                          │  ├─53392633_bldg_6697_appearance
                          │  ├─…略…
                          ├─brid
                          │  ├─53392641_brid_6697_appearance
                          │  ├─…略…
                          ├─dem
                          ├─fld
                          │  ├─natl
                          │  │  ├─arakawa_arakawa_1
                          │  │  ├─…略…
                          │  └─pref
                          │      ├─arakawa_kandagawa
                          │      ├─…略…
                          ├─frn
                          │  └─53394525_frn_6697_sjkms_appearance
                          ├─lsld
                          ├─luse
                          ├─tran
                          └─urf
                      
表1. 地形ごとの接頭辞
地物集合 接頭辞
建築物、建築物部分、建築物付属物、及びこれらの境界面、開口部 bldg
道路 tran
都市計画決定情報 urf
土地利用 luse
洪水浸水想定区域 fld
津波浸水想定 tnm
土砂災害警戒区域 lsld
高潮浸水想定区域 htd
内水浸水想定区域 ifld
都市設備 frn
植生 veg
地形(起伏) dem

またCityGMLは、3D都市モデルの詳細な表現レベルに応じて、LOD(Level of Details)が設定されている。LOD0は上から見た平面投影形状で、ポリゴンの頂点を「緯度」「経度」「高さ」の3パラメータを1セットとし、ポリゴンを構成するすべての頂点を列記している。LOD1では、建築物を立体として表現している。平面図を高さ分だけ挙げたモデルで、建築物の高さの中央値を採用しているため、低層部と高層部があるビルなどでは、高さが正確に反映されない場合もある。公開されているPLATEAUの3D都市モデルは基本的にLOD1のデータを含んでいる。LOD1のイメージは図1の通り。LOD2ではそれに加えて地物を構成する面が、「壁」「屋根」「床」など、どのようなものであるのかを表現していて、壁や屋根の面から構成される立体が建築物である、という表現ができる。加えて、屋根形状の凹凸が正確に表現できている。また、面にテクスチャが貼り付けられ、そのデータを管理しているのもLOD2である。LOD2が公開されている場所は渋谷や新宿、丸の内など一部に限られているが、現在進行形で順次公開されている。LOD2のイメージは図2の通り。

LOD1
図1: LOD1
LOD1
図2: LOD2

4 提案システム

先述の通りこの研究は、MRを用いてインタラクティブな経路シミュレーションを実現するためのものである。このアプリはMR空間上にPLATEAUの3D都市モデルを出現させて、経路を視覚的に確認した後に、その経路を現実の都市の中に入るように再現するものである。本研究で採用したシステムと、最終的に理想とするシステムをそれぞれ以下に記述する。

4.1 提案する仮想地形モデルシステム

  1. Quest3のカラーパススルー機能を使用して、MR空間を実現した。MRアプリの雛形は、quest-mr-templateを使用した。[7] [8]
  2. UnityのPLATEAU SDKから、対象となる3D都市モデルをインポートして、Unityシーンを作って、Quest3にアプリとしてビルドする形式とした。
  3. 経路の指定について、出発地点付近の道と、目的地付近の道をそれぞれ選択する形式とした。また道の選択には、上空300メートルから、コントローラーから延びるレーザーポインターでポイントしてクリックする形式とした。
  4. 出発地点と目的地までの道のりは、ユーザーが通る道を選択するようにした。
  5. 都市モデルへのインタラクションについて、コントローラーのボタンを押すことで、300メートル下の実物大3D都市モデルの、選択した出発地点にワープすることで実現した。
  6. 目的地までの移動は、今いる地点から最も近い、まだ到達していない中継地点か目的地に移動することを、目的地に到達するまで続けるシステムで実現した。

4.2 最終的に理想とするシステム

  1. Quest3のMRでは、他人が見ている仮想オブジェクトなどは見ることができないが、それらが容易に見られるMRデバイスがある場合、3D都市モデルをその場にいる人と共有できるようにすることで、シミュレーションの共有により、情報や意思の疎通の向上に繋がると考えられる。
  2. PLATEAUの3D都市モデルをインポートする形式ではなく、ストリーミングで3D都市モデルを随時インポートすることで、範囲を限らずあらゆる都市を1つのアプリでシミュレーションできるようになると考えられる。
  3. 出発地点付近と目的地付近の道を選択して、さらに途中の道を選択するのではなく、出発地点の建物の特定の場所から目的地の場所までを指定して、経路を自動で算出して、経路をシミュレーションしたい。

5 実装と評価

5.1 システム構成

本研究のアプリケーションは、Unityで構成したプログラムをquest3にビルドして動作させた。以下の図1に、システム構成図を示す。またこのアプリは、ビルドしたシステムの情報のみで動作している。

システム構成図
図3. システム構成図

また、開発に使用したPCやVRゴーグルの情報については以下の通りである。

5.1.1 開発に使用したPC

デバイス名 alien20221
プロセッサ AMD Ryzen 7 5800X 8-Core Processor 3.80 GHz
実装 RAM 32.0 GB
システムの種類 64 ビット オペレーティング システム、x64 ベース プロセッサ

5.1.2 開発に使用したVRゴーグルなど

開発には、以下のQuest3とリンクケーブルを使用した。

  • Quest3:Quest3 128GB 899-00591-01
  • リンクケーブル:ZyberGears VR 5メートルリンクケーブル

5.2 アプリケーションの概要

制作したアプリケーションが具体的にどのようなものかを紹介する。

  1. アプリを起動する。
  2. スタート時点の道オブジェクトを赤、ゴール地点の道オブジェクトを青のレーザーポインターでそれぞれ選択することで、色を変更する。
  3. 両手のレーザーポインターを緑色に変更し、スタートからゴールまでの道オブジェクトを選択する。
  4. コントローラーのAボタンを押すことで、現実と同じ大きさになったPLATEAUの、選択したスタート地点にワープする。
  5. コントローラーのBボタンを押すことで、緑色の中継地点を通りながらゴール地点まで自動で移動する。

5.2.1 アプリ起動

アプリ起動画面
図4. アプリ起動画面

quest3を起動し、アプリタブから「許可されていないアプリケーション」を選択すると、「quest-mr-template」というアプリが表示されているため、それを選択することでアプリが起動する。起動した最初のシーンには、カラーパススルーを利用したMR空間上に、PLATEAUの北千住駅周辺(航空写真付き地形オブジェクト、道オブジェクト)の3D都市モデルが設置してある。

コントローラーについて、右コントローラーから赤、左コントローラーから青のレーザーポインターが伸びている。quest3のコントローラーには左右トリガー、左右グリップ、左右スティック、右にAとBのボタン、左にXとYボタンがある。左のグリップを握ることで、レーザーポインターが緑色に変化する

5.2.2 経路設定

スタート、ゴールの設定
図5. スタート、ゴールの設定

右手のコントローラーから出ている赤いレーザーポインターを、スタート地点としたい道オブジェクトに当てて、コントローラーのトリガーを引いて、色を変更する。同様に左手のコントローラーで、ゴール地点を設定する。

中継地点の設定
図6. 中継地点の設定

左手のコントローラーのグリップを握ることで、両手のレーザーポインターの色が緑色に変更される。その状態で、スタートからゴールまで通る道を選択する。緑色に変更された道オブジェクトの中心を中継地として移動するため、特に交差点を選択することで正しくこの後の移動シミュレーションができる。

5.2.3 インタラクション

インタラクティブなシミュレーション開始
図7. インタラクティブなシミュレーション開始

スタートとゴール、中継地点を選択した後、コントローラーのAボタンを押すことで、下の方にあった北千住のPLATEAUオブジェクトの中にワープする。ワープ先は赤色のスタート地点になる。また、PLATEAUの中に入るタイミングで、建物オブジェクトが現れる。このシーンは、3D都市モデルがMR空間上に、現実の都市と同じ大きさであるというものである。

PLATEAU内の移動
図8. PLATEAU内の移動
移動の終了
図9. 移動の終了

コントローラーのBボタンを押すことで、スタートから、中継地点を通ってゴールまで移動する。

リセット
図10. リセット

右コントローラーの、トリガー、グリップ、Aボタンを同時に3秒以上押すことで、最初にシーンにリセットして戻ることができる。

5.3 評価

制作した経路シミュレーションアプリについて、Google MapおよびGoogle Earthと比較して評価した。結果を以下の表1に示す。また、最終的に理想とするシステムとも比較した。

表2. アプリケーションの評価
Google Map や Google Earth 本研究のアプリ PLATEAU 対応編集
探索機能 全世界 原則沿線のみ すべて
探索機能詳細検索機能 行くべき地図上の道を提案する 手動で指定 3次元的な詳細を提案する
MR 利用形 不可 可能 可能
3D 表現形式での探索再現度 手動で確認可能 自動で確認可能 自動で確認可能

Google Earthは、基本的に全世界を対象としていて、世界中のストリートビューを立体的に見ることができるが、制作したアプリでは北千住駅周辺のみ、同じように制作したとしても2キロメートル四方程度の広さしか探索できない。しかし理想とするアプリでは、PLATEAUの対応範囲をすべて、3D都市モデルのストリーミングを利用して探索可能にしたい。

経路検索について、Google Mapでは、世界中の行くべき道を、目的地と出発地を入力することで案内してくれる。本アプリでは、移動する経路を手動で入力するなど、経路検索については未着手だが、最終的には、Google Mapのような平面の経路検索からさらに進化した、3次元空間上の最短経路などを表示できるようにしたい。

MRについては、Google MapやGoogle Earthでは実装されていない要素である。デバイスの機能の向上などにより最終的に、複数人が同じ3D都市モデルを見てナビゲーションを確認できるようにしたい。

3D都市空間でのインタラクティブな経路再現については、Google Earthのストリートビューではできない自動での経路確認を実装できた。

6 考察

PLATEAUを利用したMR経路シミュレーションアプリと既存のデジタルツインアプリについて。Google EarthやGoogle Mapは、その普及度と使いやすさにおいて、非常に大きな強みを有している。これらのアプリケーションは、世界中どこでも手軽にアクセス可能であり、街の様子をリアルタイムで確認できるストリートビュー機能は、ユーザーにとって非常に直感的な情報収集ツールであると言える。また、これらのプラットフォームは既に広く普及しており、多くのユーザーにとって親しみやすいものであると考えられる。

その一方で、本研究で開発したアプリケーションが目指すのは、これらの既存アプリケーションが提供する情報のみに頼るのではなく、より高度で包括的なナビゲーション体験を実現することである。理想とするシステムでは、Quest3のMR機能を活用して、現在の仮想オブジェクトを単独で閲覧するのではなく、それらを周囲の人々と共有することで、情報や意思の疎通をより円滑に行えるようにすることが可能になると考えられる。これにより、ユーザー間でのシミュレーションの共有が可能となり、集団での移動や協力作業が求められる状況において、その有効性が増すと言える。

最終的に、出発地点と目的地を具体的に指定し、その間の経路を自動で算出する機能は、ユーザーが行きたい正確な場所への経路を提供することで、現実世界での移動をより効率的かつ確実にすることに寄与すると言える。これは、特に初めて訪れる場所や複雑な都市環境において、ユーザーが迷子になるリスクを減少させることに貢献すると考えられる。

総合すると、本研究のアプリケーションは、現実世界での移動を仮想的に再現し、ユーザーが初めて訪れる場所でも迷うことなく、安心して移動できるよう支援することを目的としている。このシステムが実現することにより、ナビゲーションの精度が向上し、都市空間における移動の効率化と安全性の増進が期待できると言える。

付録

以下は、アプリケーションの開発の詳細である。

Unity

まずアプリを実装するにあたって、Unity HubからUnity 2022.3.2f1をインストールした。また、Android Build Supportのモジュールもインストールした。インストール場所はC:\Program Files\Unity\Hub\Editor\2022.3.2f1\Editor\Unity.exeとした。

次に、以下の手順で quest-mr-template をgithubからインストールした。

  1. GitHubのページの緑の「Use this template」ボタンからリポジトリを作成した。
  2. 作成されたリポジトリをローカルにcloneした。
  3. Unity Hubにプロジェクトを登録した。
  4. プロジェクトを開き、「Build Setting」の項目から、buildするプラットフォームをAndroidに変更した。
  5. 「Project Setting」の項目から、図8のように、「XR Plug-in Management」の項目で「Android」タブから「Oculus」のチェックボックスにチェックを入れた。
  6. 同様に「Project Setting」の項目から、「XR Plug-in Management」の下にある「Oculus」の選択し、図9のように設定した。
  7. 「File」タブから「Save As …」を選択し、Assetフォルダにシーンを保存した。シーン名は「withPLATEAU」とした。
XR Plug-in Management
図11. XR Plug-in Management
XR Plug-in Management → Oculus
図12. XR Plug-in Management -> Oculus

PLATEAU SDK

以上の項目で設定したUnityプロジェクトにおいて、PLATEAU SDKと3D地理データを以下の手順でインストール、インポートした。[9]

  1. Githubから、PLATEAU SDK for Unity v2.2.1-alpha.tgzをダウンロードした。
  2. UnityプロジェクトのPackage Managerから、「Add package from tarball…」を選択し、先ほどダウンロードしたPLATEAU SDKを選択し、すべてインストールした。
  3. Unityプロジェクト上部のタブからPLATEAU SDKを起動し、図10、11のようにサーバーから東京23区をデータセットとして選択して、範囲選択を開始した。
  4. Unityのシーン画面から、図12に示す範囲を選択し、決定ボタンを押した。
  5. PLATEAU SDK の地物別設定から、建築物、道路、土地起伏にまつわる要素はそのままにして、橋梁、都市計画決定情報、災害リスク、土地利用の項目の「インポートする」のチェックボックスからチェックを外してから、「モデルをインポート」ボタンを押して、北千住周辺の3D地理データをインポートした。
PLATEAU SDK 1
図13. PLATEAU SDK 1
PLATEAU SDK 2
図14. PLATEAU SDK 2
PLATEAU SDK の選択画面
図15. PLATEAU SDK の選択画面

オブジェクトの配置

以下の手順で、ワールド内のオブジェクトを編集した。

  1. インポートした3D地理モデルを、Hierarchyから選択して、InspectorのPositionからY座標を-300にした。
  2. Hierarchyにある「13100_tokyo23-ku_2022_citygml_1_1_op」の下には以下のような階層でオブジェクトがある。これをこれからプログラムで制御するため、以下のように、[たくさんの道オブジェクト1] を移動させて [たくさんの道オブジェクト2] と同じ階層に移動させた。
            13100_tokyo23-ku_2022_citygml_1_1_op
            ├53395604_tran_6668_op.gml
            └LOD1
                └[たくさんの道オブジェクト1]
            ├53394604_tran_6668_op.gml
            └LOD1
                └[たくさんの道オブジェクト2]
            
  1. デバッグ用のUIを表示するため、UnityエディタのHierarchyビューで右クリックし、「UI」→「TextMeshPro - Text」を選択して新しいText Mesh Proのテキストオブジェクトを作成した。
  2. InspectorからCanvasオブジェクトの詳細を、図13の通りに設定した。また、Canvasオブジェクトの下のText(TMP)オブジェクトのInspectorの設定を図14に示す。画像に映っている範囲以外は変更していない。
  3. quest-mr-templateの中で最初からシーンに配置されているオブジェクトのうち、図15で文字の色が薄くなっているオブジェクトを削除した。
  4. UnityエディタのHierarchyビューで右クリックし、Create Emptyで「DebugObject」と「GameResetter」の2つのオブジェクトを作成した。
  5. 「[BB] Controller Tracking left」と「 [BB] Controller Tracking right 」の下の階層に、それぞれ「LineRendererL」と「LineRendererR」という空のオブジェクトを、先ほどと同じ手順で作成した。
  6. 13100_tokyo23-ku_2022_citygml_1_1_op ├53394694_tran_6668_op.gml └LOD1 のLOD1オブジェクトにおいて、InspectorのTagから、Add Tag…を選択し、Tag 0として「Tile」というタグを追加した。また、Layers欄からUser Layer 3にTile Layerを追加した。
Canvasオブジェクトの設定
図16. Canvasオブジェクトの設定
Text(TMP)の設定
図17. Text(TMP)の設定
Hierarchy一覧
図18. Hierarchy一覧

プログラムの実装

先述したシーン内のオブジェクトに、以下のスクリプトを実装した。スクリプトは、ProjectのAssertsフォルダ内で右クリックし、「Create」->「C# Script」から開始した。スクリプトの名前も、以下のタイトルとした。

TileManager

このスクリプトは、PLATEAUに含まれる道のオブジェクトの色を変更させている。道のオブジェクトは、以降はタイル(Tile)として扱う。具体的には、以下の機能を実装している。実装したコードはCode.1に示す。

  1. マテリアル変更機能:左手で選択されたタイルのマテリアルを青色に、右手で選択されたタイルのマテリアルを赤色に変更する。また、グリップボタンが押された状態でタイルを選択すると、そのタイルのマテリアルを緑色に変更する。赤と青に変更されるタイルは常に1つだけになるように、他のタイルが選択されたら元のマテリアルに戻るようにしている。
  2. 上空にオブジェクトを配置する機能:マテリアルを変更したとき、そのタイルの上空1.5メートルの座標にからのオブジェクトを自動生成する。右手で赤色に変更したときは「StartAboveObject」で、左手は「GoalAboveObject」、緑色に変更したときは「AboveObject」という名前とする。タイルの色が変更になった場合、ログと共に元あったAboveObjectは削除され、新しい場所に設置される。

Reizaapointaa

このスクリプトは、コントローラーから出るレーザーポインター操作を処理している。具体的な機能を以下に示す。実装したコードは、Code.2に示す。

  1. コントローラーから出るレーザーポインターが物理オブジェクトにヒットするかをRaycastで検出し、ヒットしたタイルに対してTileManagerのChangeMaterialメソッドを呼び出す。
  2. レーザーポインターの色を設定する。
  3. タイルのマテリアルを変更したとき、「Michi Mark」とデバッグとして表示させる。

CameraRigMover

このスクリプトは、プレイヤーの視点を移動させるための機能を設定している。具体的な機能を以下に示す。実装したコードは、Code.3に示す。

  1. OculusのコントローラーのAボタンが押されたときに、StartAboveObjectの位置にカメラリグを瞬時に移動させる。
  2. シーン内からAboveObjectを含む名前のオブジェクトを見つけ出し、それらをリストに追加する。これにより、カメラリグが移動する各ポイントが決定する。
  3. 現在の位置から最も近いAboveObjectを見つけ、そのオブジェクトに向かって指定した速度で移動させる。目的地に到達すると、次のターゲットを検索してまた移動する。
  4. 3をカメラリグがGoalAboveObjectに到達するまで繰り返し、到着したら移動を停止する。

MaterialChanger

このスクリプトは、OculusのコントローラーのAボタンが押されたときに、Code.3で移動すると同時に、PLATEAUの建物オブジェクトを見えるようにするためのスクリプトである。具体的な機能を以下に示す。実装したコードは、Code.4に示す。

  1. アプリ起動のタイミングで、建物オブジェクトのマテリアルを透明なものに変更し、元のマテリアルを保存しておく。
  2. Aボタンがもう一度押されたとき、建物オブジェクトのマテリアルを元に戻すようにする。

GameResetter

このスクリプトは、Oculusのコントローラーの、トリガー、グリップ、Aボタンの3つを3秒間押し続けたときに、アプリ起動シーンに戻すためのスクリプトである。実装したコードは、Code.5に示す。

DebugDisplay

このスクリプトは、呼び出すことでシーン内のデバッグテキストにデバッグ用の文字を出力することができるようになるスクリプトである。実装したコードは、Code.6に示す。

コンポーネントの設定

  1. 設置したDebugObjectにDebugDisplayスクリプトをアタッチした。また、Inspectorから「Debug Text」の欄にText(TMP)をアタッチした。
  2. [BB] Camera Rigオブジェクトに、CameraRigMoverスクリプトをアタッチした。また、InspectorからCameraRigMoverのコンポーネントを、Speedを7、DebugDisplayの欄にDebugObjectをアタッチした。
  3. 設置したLineRendererLに、Reizaapointaaスクリプトをアタッチし、さらにLineRendererコンポーネントを、Add Componentタブから追加した。Inspectorの設定は図16に示す。ただしLineRendererとスクリプトにアタッチするマテリアルは、Assets/Oculus/SampleFramework/…に入っているマテリアルを使用した。
  4. 3と同様に、LineRendererRにReizaapointaaスクリプトをアタッチし、LineRendererコンポーネントを追加した。Inspectorの設定は図17に示す。
  5. PLATEAU の道オブジェクトの上位階層のLOD1オブジェクトに、TileManagerスクリプトをアタッチした。Inspectorの設定は図18に示す。
  6. PLATEAU の建物オブジェクトの上位階層のLOD1オブジェクトに、MaterialChangerスクリプトをアタッチした。InspectorのTransparent MaterialにはAssets/Oculus/SampleFramework/…にあるClearマテリアルをアタッチした。
  7. GameResteerオブジェクトにGameResetterスクリプトをアタッチした。
LineRendererLのInspector
図19. LineRendererLのInspector
LineRendererRのInspector
図20. LineRendererRのInspector
TileManagerコンポーネントのinspector
図21. TileManagerコンポーネントのinspector

ビルド設定

  1. 「File」タブから「Build Setting」を起動し、PlatformをAndroidに変更した。
  2. Scenes in Build欄において、Add Open Scenesボタンから「withPLATEAU」シーンを追加した。
  3. Quest3とPCをリンクケーブルで接続し、Quest3側を開発者モードにして、Quest3側でPCとのデータのやり取りを許可した。
  4. UnityのBuild Settingにて、「Build And Run」ボタンを押して、Buildを開始した。
  5. Quest3のアプリ欄の「提供元不明」欄にビルドしたアプリが表示されていればビルドは成功である。

参考文献