LoginSignup
8
6

More than 1 year has passed since last update.

nrealアプリを作りたい人がはじめに読む記事(随時更新中)

Last updated at Posted at 2020-07-12

本記事について

本記事では、nrealアプリ開発に関して、機器セットアップ~アプリ開発、参考情報などを随時更新しています。個人的な備忘録のような記事になるか思いますが、これからnrealアプリの開発をはじめる方々の参考になれば幸いです。

デバイスセットアップ

デバイス設定から本体の起動まで

nreal lightを開封すると、本体、付属品と、クイックスタートガイド(小さな冊子)が同梱されています。
クイックスタートガイドを見ると使用するまでの手順が書いてあると思いきや、デバイスのスイッチなどの説明、付属品の付け方が書いてあるだけで、本体を起動して使用するまでの手順は書いていません。
そのあたりの手順は公式サイトにも見当たらなかったのですが(見つけた方コメントください)、こちらの記事で事細かに解説されているので、こちらを参考にしましょう。
また、「ランプが点灯しているけどどういう意味?」「Wifiへの接続どうするの?」といった動作、設定に纏わる情報は公式のFAQで紹介されてるので、設定の類はFAQを読みましょう。

Computing Unitのセットアップ

Nreal Computing Unitは画面のないAndroidデバイスであるため、Android開発者におなじみのadbコマンドなどを使用して設定をすることができます。ただ、より簡単に設定をしたい場合はscrcpyを使うのが圧倒的に簡単なのでオススメです。
scrcpyを簡単に説明すると、PCに接続しているAndroid端末の画面を表示し、操作できるようにしてくれるツールです。またアプリのインストールも画面上にapkファイルをドラッグ&ドロップするだけでできてしまう優れモノです。。
公式のFAQで紹介されている設定手順の中に、scrcpyを使った操作で説明しているものもあるので、インストール必須のツールと思っていた方が良いでしょう。

開発環境

動作したUnityとNRSDKが組み合わせ

nrealの開発環境は、各ツールの最新版を組み合わせてもうまく動作しないことがあります。
nrealがサポート、動作確認したバージョンの組み合わせで使用する方が吉。
以下は、デモアプリのビルド&実行まで動作できた組み合わせです。

# Unityバージョン NRSDKバージョン
1 2018.4.24f1 1.2.1
2 2020.3.33f1 1.8.0

用語に関する補足

・NRInputのRaycast Modes は、「Gaze」「Lazer」。公式の説明だとLazerはRay Modeと記述されている。

公式デモの動かし方

  • 基本的には公式クイックスタートに従って進めれば大丈夫。以下、補足。
    • Player Settingsの設定をする前に、Build Settingsでプラットフォーム Androidを選択し、Switch Platformをしておくこと。
    • 2020/7/13時点では、Unity 2018.4.x、NRSDK1.2.1を使用する前提の手順になっている。異なるバージョンを使用する場合は適宜読み替えること。動作しなかったらツールのバージョンを疑ってみるのが良い。

プログラミングTips

カメラの使用方法

Unityを使ってPC/スマートフォンのカメラを使用する場合は、Unityが提供している WebCamTexture を使用するケースが多いと思います。が、nreal lightのカメラを使用する場合は、WebCamTexture ではなく、NRSDKが提供している NRRGBCamTexture を使用します。(NRRGBCamTextureは、2020/7/20時点では公式リファレンスに記載がないクラスです。詳細はソースコードを見ましょう)
NRRGBCamTextureは、公式サンプルのRGB Camera で使用しています。ただ、公式ドキュメントにはあまり記述がないので、ソースコードを見た方が早いです。
ざっくり、WebCamTextureとの使い方の違いですが、WebCamTextureがTextureクラスを継承しているのに対して、NRRGBCamTextureはTextureを継承していません。NRRGBCamTextureからTextureオブジェクトを取得したい場合は、NRRGBCamTexture#GetTextureメソッドを使用して取得します。

NRRGBCamTextureからTextureオブジェクトを取得する方法
    NRRGBCamTexture nrRgbCamTexture = new NRRGBCamTexture();
    Texture texture = nrRgbCamTexture.GetTexture();

あと細かい点ですが、Textureのwidth、heightは、GetTexture().width/heightで取得しても良いですが、NRRGBCamTexture.Width/Heightでも取得可能です。

平面検出をOFFにする方法

そもそも平面検出は実装しなければ検出されないのですが、NRSDKのデモでは既に平面検出が実装されているものもあります(HelloMRシーンには実装済みです)。そのため、NRSDKのデモをベースにアプリを作る場合に平面検出が不要なら、その実装を無効、または削除すれば平面を無効にできます。
平面は、NRFrame#GetTrackablesによって検出することができます。NRSDKのデモでは、PlaneDetectorというスクリプトで実装されており、同名のGameObjectにアタッチされています。
そのため、シーンに設定されているPlaneDetectorを無効にすることで平面検出をOFFにすることができます。

01.png
HierarchyからPlaneDetectorを選択、Inspectorで無効にする

ちょっとした気付き(Tipsほどボリュームがないもの)

  • IPointerDownHandlerはコントローラのTriggerボタンをハンドリングしていて、他のボタンには反応しない。(おそらくIPointerUpHandlerも)
    • Trigger以外のボタンのハンドリングをしたい場合は、Updateイベントで、NRInput.GetButtonDownをハンドリングする。

課題

NRSDK 1.3.0 でビルドしたアプリはエラー「Glasses connect error.Please connect the device correctly」が表示されて起動しない。
* (21/5/17)こちら にNRSDK 1.4.8で同事象の対応をされたという記事を発見。事象の原因はやはりデバイス側のファームウェア?がNRDSKに対応していないからという理由のよう。記事の中ではデバイス側にController Unitのほうにアップデートアプリを入れて対応しているようなのだけど、アプリのリンク先が切れているために、現状対応できず。

→(22/4/30) 遂に解決策発見。アップデート用のファームウェア(.apk)が提供されているので、adb install後、scrcpyなどで接続、「Update」アプリを実行することでアップデートNRSDKのアップデートに成功。
Where are the Nreal System Software Update Files (.apk)
Specification of OTA cannot be Upgraded
22/4/30時点でのファームウェアのバージョンは以下の通り。

Nreal システムバージョン Glasses Firmware Version
SDM845-202109120110-927 3.1.04.008.20200922
  • (8/10)Controllerのボタン位置が公式ドキュメントと異なる。Controllerの写真だとコントローラの上部がApp Button、下部がHome Buttonとなっているけど、NRSDK->Demo->Input-ControllerInfoを動かしてみると、各ボタンを押したときのApp/Homeの位置が逆になっている。

参考情報

  1. 公式ドキュメント
  2. 公式FAQ
    • 開発資料を読む前にこっちを読んだ方が良い。デバイスの起動方法や、ランプ点滅の意味など細かく説明されている
  3. Nreal Light Developer Kit開発手順(サンプルシーンの起動まで)
  4. Nreal / 3Dモデル表示と平面検出とコントローラ操作
8
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6