デコシノニッキ

ホロレンジャーの戦いの記録

【メモ】HoloLensでSharing ServerのIPをファイルから読み込む

HoloLensでSharingするときはSharing ServerのIPの入力が必要です

リンク先では、OCRで実装していますが他にもやり方が記事内で紹介されています
t.co

考えうるIPの入力方法一覧

  • Editorで入力してビルドする(最悪の方法)
  • 固定IPを用いる
  • アドレスを書いてあるファイルにアクセス
  • UDPでサーバーのIPをブロードキャスト(ルータのセキュリティ設定による)
  • OCRで読み込む(手書き文字は困難っぽい)
  • QRコードを読み込む
  • アプリ内で入力

mtholoblog.hatenablog.com

このようにいくつか方法はありますが、今回は簡単にファイルから読み込む方法をメモしておきます
ファイルを作成するにあたって、カメラロールにファイルを保存している理由はDevicePortalからのアクセスが楽なのとデプロイしても上書きされないためです

以下のスクリプトをSharing prefabにアタッチしてください

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using HoloToolkit.Sharing;

#if UNITY_UWP
using Windows.Storage;
using System.Threading.Tasks;
#endif

[RequireComponent(typeof(SharingStage))]
public class SharingConfig : MonoBehaviour {

    SharingStage _sharingStage;

    [Tooltip("Please put file u created under the CameraRoll")]
    public string fileName;
    
	// Use this for initialization
	void Start () {
         _sharingStage = GetComponent<SharingStage>();
         _sharingStage.ConnectToServer(GetServerIPFromFile(), _sharingStage.ServerPort);
	}

    string GetServerIPFromFile()
    {
        var serverIP = "localhost";

#if !UNITY_EDITOR
    //HoloLens内ではカメラロールを参照しています
        try
        {
            var folder = Windows.Storage.KnownFolders.CameraRoll;
            var sr = new StreamReader((System.IO.Stream)File.OpenRead(Path.Combine(folder.Path, fileName)));
            serverIP = sr.ReadLine();
            sr.Dispose();
        }
        catch
        {
            serverIP = _sharingStage.ServerAddress;
        }

#else
    //Unity Edititor内では、Assetと同じ階層を参照しています
        if (!File.Exists(fileName))
        {
            return serverIP;
        }

        var sr = new StreamReader(fileName);
        serverIP = sr.ReadLine();
        sr.Close();
#endif
        return serverIP;
    }
}

[デコシノニッキ]は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」