【MagicLeap入門】MagicLeap Toolkitのサンプルシーンの使いどころを徹底解説!


UnityでのMagic Leapアプリ開発において、コントローラ操作やマルチプレイなどを実装したい時があります。

それらの開発を簡素化できる、Magic Leap Toolkit(MLTK)という開発用ツールキットがあります。

そこで、今回はMagic Leap Toolkitのインポート方法やサンプルシーンの詳細、開発でどのように使用すべきかを解説します。

※本記事は2020年3月現在の情報になります。バージョンアップ等で内容が変更されている場合がありますので、ご注意ください。

Magic Leap Toolkitとは

MagicLeap社が提供している公式のツールキットになります。

MagicLeapのアプリ開発時に便利な機能を拡張できたり、特定の問題を解決するためのアセット等を提供しています。

Toolkitの中には他の開発で再利用可能なサンプルシーンやプレハブ、コードなどが含まれています。

このToolkitを利用することで開発を簡素化し工数の短縮を図ることができます。

インポートまでの手順

まずはMagicLeap Toolkitを使用できる環境にするためのインポート手順を説明します。

前提条件

Magic Leap Toolkitを使用するためには以下の2点を満たす必要があります。

  1. 最新のLumin SDKであること
  2. Unityプロジェクトテンプレートをダウンロードしていること(以下の表からダウンロードできます)
    プロジェクトテンプレート名 Magic Leap SDKバージョン Unityバージョン
    Unity-Project-Template-0.23.0 Lumin SDK 0.23 Unity 2019.2.X
    Unity-Project-Template-0.22.0 Lumin SDK 0.22 Unity 2019.2.X

インポート手順

    1. GitHubからUnity Magic Leap Toolkitをダウンロードします。

 

    1. Unity Hubを起動して、Unityプロジェクトテンプレートを開きます。

 

    1. メニューバーからAssets > Import Package > Custom Packageを選びます。

 

    1. 先ほどダウンロードしたMagicLeap-Tools.unitypackageを選択し、開くを押します。

 

    1. Import Unity Packageウィンドウが開かれるので、AllをクリックしImportを選択します。これにより、Toolkitがインポートされます。

 

    1. インポートが完了したら、Toolkitを利用できます。
      例えばサンプルシーンを確認したい場合は、ProjectタブでAssets>MagicLeap-Tools>Examplesを選択して各サンプルシーンを開きます。

 

以上でMagicLeap Toolkitのインポートは完了です。

MLTKのサンプルシーンの解説

次にMagicLeap Tooklitのサンプルシーンを、シーン毎に解説していきます。

※以下のサンプルシーンを2020年3月現在の内容になります。内容が変更されている可能性があるのでご注意ください。

ControlInput

コントローラーのボタン入力やタッチパッド操作など、コントローラーの挙動を確認するためのサンプルシーンになります。

画面上に「Status」「Events」が表示されており、Statusには現時点のコントローラーの状態が表示され、Eventsにはこれまでの操作履歴が表示されます。

このサンプルシーンでは以下の情報の確認に使えます。

  • コントローラーの位置や向き、回転(6DoFの情報)
  • コントローラーのトリガー・バンパー・ホームボタンの挙動
  • コントローラーのタッチパッドへの入力情報(タッチ・スライド・ホールド等)

前提条件として、以下の権限を正しく設定しないとアプリが正常に動作しないので、正しい権限設定をしてください。

  • ControlPose
  • LowLatencyLightwear

KeepInFront

このサンプルシーンはあるオブジェクトを常にビューに表示するためのものになります。

MagicLeapで表示させるオブジェクトは、例えば壁に近づくと壁の奥に存在する判定となり、オブジェクトがビュー上に表示されなくなる場合があります。

ただ、ものによっては常にビューに表示しておきたいものがあり、それらのデジタルオブジェクトをユーザーのビューに維持する方法を確認するために使えます。

また、指定したデジタルオブジェクトはヘッドポーズに合わせてスムーズに位置と向きを変えるため、目の疲れを最小限に抑ることもできます。

この機能は例えば、指示やステータステキスト、またはUIに視覚の焦点を合わせ続けるときに役立ちます。

前提条件として、以下の権限を正しく設定しないとアプリが正常に動作しないので、正しい権限設定をしてください。

  • LowLatencyLightwear

RuntimeConsole

Unityで作成したMagicLeapアプリをデバッグする際に、UnityのログメッセージをMagicLeapのビューに表示するためのサンプルシーンになります。

このサンプルシーンはデバッグを簡素化するために使えます。

画面に表示されるメッセージは以下になります。これらのメッセージはUnityからUnity Application.logMessageReceived イベントを使用してユーザーのビューに表示されます。

  • Debug.Log:白文字
  • Debug.LogWarning:黄文字
  • Debug.LogError:赤文字

前提条件として、以下の権限を正しく設定しないとアプリが正常に動作しないので、正しい権限設定をしてください。

  • LowLatencyLightwear

SurfaceDetails

このサンプルシーンでは、コントローラーのレイキャストに当たった現実世界のオブジェクトの表面の種類を決定します

椅子やテーブルなどを判定できるので「椅子やテーブル上のみに特定のオブジェクトを出現させる」といったことも可能になります。

以下の6つのオブジェクトを判定することができます。

  • 椅子(Seat)
  • テーブル(Table)
  • 床(Floor)
  • 天井(Ceiling)
  • 壁(Wall)
  • 底面(Underside)

前提条件として、以下の権限を正しく設定しないとアプリが正常に動作しないので、正しい権限設定をしてください。

  • LowLatencyLightwear
  • World Reconstruction

PlaceOnFloor

このサンプルシーンは、空間を認識して床のエリアを特定することができます

そして、床を特定することで、ユーザがコントローラー操作等をせずに床を注視するだけ(ヘッドポーズが静止したまま)でオブジェクトを配置することができます。

さらに、床にオブジェクトが配置されるとPlaceOnFloorコンポーネントは自動的に無効化されます。

つまり、ユーザがややこしい入力なしに、アプリの開始位置を決定することができるサンプルシーンになります。

あくまで開始位置を決定するためのもので、コンテンツを別の場所に設置したりすることはできないのでご注意ください。

前提条件として、以下の権限を正しく設定しないとアプリが正常に動作しないので、正しい権限設定をしてください。

  • LowLatencyLightwear
  • World Reconstruction

RampLight

このサンプルシーンを使うことで、リアルタイムでライティングを行い、どの角度でも一定以上の明るさを保つことできます

MagicLeapのディスプレイで見る際に適切な再現性でオブジェクトを表示することができます。

UnityでいうDirectional Lightと同じような動作を行います。

前提条件として、以下の権限を正しく設定しないとアプリが正常に動作しないので、正しい権限設定をしてください。

  • LowLatencyLightwear

ControlPointer

このサンプルシーンでは、コントローラーでオブジェクトを選択・操作・移動するためのポインターを使うことができます

ポインターを素早く移動させるとポインタが遅れて動き、たゆみが表現されるようになっているので、バーチャルなのに現実のポインターのような感覚を得られて直感的に使いやすくなっています。

MagicLeapのアプリでオブジェクトをユーザに動かしてほしい場合に使えるサンプルシーンになります。

前提条件として、以下の権限を正しく設定しないとアプリが正常に動作しないので、正しい権限設定をしてください。

  • LowLatencyLightwear
  • ControlPose

Transmission

このサンプルシーンは、デバイス間の同期を行うために使うものになります

同じLAN(ローカルエリアネットワーク)に接続されたMagicLeapやPC、スマートフォン、その他のデバイス間を同期することができます。

同期できるものは色々ありますが、主にオブジェクトの位置の同期やメッセージの共有などで使うことが多いです。

Transmissionシステムを使う場合、下のSpatialAlignmentコンポーネントが必要になることをご注意ください。

前提条件として、以下の権限を正しく設定しないとアプリが正常に動作しないので、正しい権限設定をしてください。

  • LocalAreaNetwork (Reality privilege – see Privilege Requestor below)
  • Internet
  • LowLatencyLightwear

また、ネットワークとして以下の要件を満たす必要もあります。

  • すべてのデバイスが同じLANに接続されている
  • UDPパケットトラフィックが、ネットワーク上でブロック解除されている

SpatialAlignment

上のTransmissionを使用する際に必要となるコンポーネントになります

このSpatial Alignmentが存在することで、Transmissionで同期しているデバイス同士で同じオブジェクトを見ることができるようになっています。

一方でこのSpatial Alignmentを使用するにはTransmissionシステムが必要なため、両方を使用することを忘れないように注意してください。

前提条件として、以下の権限を正しく設定しないとアプリが正常に動作しないので、正しい権限設定をしてください。

  • LocalAreaNetwork (Reality privilege – see Privilege Requestor below)
  • Internet
  • LowLatencyLightwear
  • PcfRead

また、ネットワークとして以下の要件を満たす必要もあります。

  • すべてのデバイスが同じLANに接続されている
  • UDPパケットトラフィックが、ネットワーク上でブロック解除されている

まとめ

以上、MagicLeap Toolkit(MLTK)のセットアップ方法やサンプルシーンについての解説になります。

ぜひ本記事を参考にMagicLeapアプリの開発を一層進めていただければ幸いです。

また、XR-HUBではMagicLeap開発の参考になる記事も随時更新しているので、こちらもご参照ください。

参考記事)【MagicLeap入門】Unityのセットアップ手順を1から解説!

参考記事)【MagicLeap入門】ハンドトラッキングの使い方を学ぶ!

参考記事)【MagicLeap入門】3Dオブジェクトを任意の平面に設置する!

参考記事)【MagicLeap入門】Magic Leapのコントローラーの機能や特徴を徹底解説!


この記事はいかがでしたか?
もし「参考になった」「面白かった」という場合は、応援シェアお願いします!

株式会社x garden CGO(Chief Growth Officer)
Unityエンジニアとして日々Unityと奮闘中
自他共に認めるゲーマー
Splatoon最高記録:世界6位(リグマペア)
ApexLegends最高記録:5連チャンピオン