本記事について
本記事では、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 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にすることができます。
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の位置が逆になっている。
参考情報
- 公式ドキュメント
-
公式FAQ
- 開発資料を読む前にこっちを読んだ方が良い。デバイスの起動方法や、ランプ点滅の意味など細かく説明されている
- Nreal Light Developer Kit開発手順(サンプルシーンの起動まで)
- Nreal / 3Dモデル表示と平面検出とコントローラ操作