どうも、かげさんです(^^)/
あなたがこの記事を読んでいるのは何回目でしょうか?
初めての方、いらっしゃい!
複数回目の方、再訪問ありがとです(・∀・)
「Unity で固定文字列を表示するようにして Nreal グラスで確認する」で固定文字列を表示できるようになりました。
なので、次は、プログラムから動的に変更する文字列を表示します。
例によって画像はクリックすると拡大表示されます。
プログラムから動的に文字列を変更する手順

Hierarchy ビューで右クリックメニュー「Create Empty」を選択。

Hierarchy ビューに GameObject が表示されます。
「Create Empty」で作られる GameObject は Transform だけを持つゲームオブジェクトです。
Transform の Position X, Y, Z には値が初期設定されています。

Transform の Position X, Y, Z の値を下記の手順で初期リセットします。
①Transform の欄の右端にある「:」をクリックしてメニューを表示
②Reset を選択

リセットされて Position X, Y, Z が 0 になった。

このゲームオブジェクトにスクリプトを紐づけしたいので、まずはスクリプトを作ります。
① Add Component ボタンをクリック
② リストをスクロールして New Script を選択

New Script の Name 欄からスクリプト名を入力

今回はテキストとして「接続している Nreal グラス(Nreal Light か Nreal Air)」と「現在の DoF 」を表示しようと思うので NrealStateObj としました。

Project ビューに追加された NrealStateObj の C# スクリプトをダブルクリック

かげさんは、Unity のスクリプトエディタとして Visual Studio Code にしているので、こんな感じで表示されます。

赤枠の部分のソースを入力して、エディタを閉じます。
画像だとソースは見づらいと思うのでテキストで貼り付けておきます。
using NRKernal;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class NrealStateObj : MonoBehaviour
{
public GameObject nrealStateObj = null; // Textオブジェクト
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
// オブジェクトからTextコンポーネントを取得
Text nrealStateText = nrealStateObj.GetComponent ();
// テキストの表示を入れ替える(Nrealグラスの種類)
nrealStateText.text = "Nreal ?????";
if (NRDevice.Subsystem.GetDeviceType() == NRDeviceType.NrealLight){
nrealStateText.text = "Nreal Light";
}
if (NRDevice.Subsystem.GetDeviceType() == NRDeviceType.NrealAir){
nrealStateText.text = "Nreal Air";
}
// テキストの表示を入れ替える(DoFの種類)
if (NRSessionManager.Instance.NRHMDPoseTracker.TrackingMode == NRHMDPoseTracker.TrackingType.Tracking6Dof){
nrealStateText.text = nrealStateText.text + "(6Dof)";
}
if (NRSessionManager.Instance.NRHMDPoseTracker.TrackingMode == NRHMDPoseTracker.TrackingType.Tracking3Dof){
nrealStateText.text = nrealStateText.text + "(3Dof)";
}
if (NRSessionManager.Instance.NRHMDPoseTracker.TrackingMode == NRHMDPoseTracker.TrackingType.Tracking0Dof){
nrealStateText.text = nrealStateText.text + "(0Dof)";
}
if (NRSessionManager.Instance.NRHMDPoseTracker.TrackingMode == NRHMDPoseTracker.TrackingType.Tracking0DofStable){
nrealStateText.text = nrealStateText.text + "(0DofStable)";
}
}
}
★ポイント★
01行目: NRSDK を使うために必要なおまじない(必ず書かないとだめ)
05行目: Text オブジェクトを使うために必要なおまじない(必ず書かないとだめ)
09行目: Inspector ビューに「 Nreal State Obj 」の欄を追加するためのおまじない
21行目: Inspector ビューの「 Nreal State Obj 」を Text オブジェクトとして取得するおまじない
24~30行目: Nreal Light か Nreal Air かを判定して Text オブジェクトに設定する処理(一応、どちらでもなければ「 Nreal ????? 」と表示する)
33~44行目: DoFの種類を判定して Text オブジェクトに設定する処理

エディタを閉じて C# スクリプトのコンパイルが行われると Inspector ビューに「 Nreal State Obj 」の欄が追加されます。

「 UI Text 」を Hierarchy ビューから Inspector ビューの「 Nreal State Obj 」にドラッグ&ドロップ
ここでは「Unity で固定文字列を表示するようにして Nreal グラスで確認する」で作成した「 UI Text 」をドラッグ&ドロップしました。
これでビルドします。
ビルドした .apk を専用アプリの Nebula から実行すると Game ビューで「テキストテスト」となっているところが Nreal Light を繋いだ時は「Nreal Lihgt(6DoF)」、Nreal Air を繋いだ時は「Nreal Air(3DoF)」となれば成功です。
かげさんの場合、DoF を切り替えできるようにしていたので、DoFを切り替えると () 内の部分に表示される DoF が変わっていることが確認できました。
ここまではOKだ
最大201インチのシアター級巨大スクリーン(ARグラス越しに4mで130インチ、6mで201インチに相当)で映像をお楽しみいただくことができます。
TUVが認めた目に優しいARグラス:国際的な独立第三者検査・認証機関であるテュフラインランド(TUV Rheinland)からハードウェアレベルの「低ブルーライト・フリッカーフリー」認証を取得しました。
Nreal Streaming Box(エンリアル ストリーミングボックス) NR-7101AGL - ARグラス/スマートグラス Nreal Air 専用/Android・iOS 両対応/Nreal Airにケーブルで接続するボックス