Feel Physics Backyard

HoloLensの出張授業をする会社で、教材を開発しています

アプリ起動後にシェアリングサーバのアドレスを入力できるようにするManualIpConfigUtilityを自分のアプリに組み込む

シェアリング関係を開発していると、サーバのアドレスが変わるたびに設定を変えるのが面倒です。アプリを起動させてからIPアドレスを入力できればいいのですが…

そんなことを可能にしてくれるのがMRTK-Examplesに含まれているSharingTestシーン中のManualIpConfigUtilityです。

f:id:weed_7777:20180428160456j:plain

これを自分のアプリに導入する方法を説明します。

まず、オブジェクトをプレハブ化します。

f:id:weed_7777:20180428163359p:plain

エクスプローラで、自分のアプリにコピー&ペースとします。

f:id:weed_7777:20180428163451p:plain

f:id:weed_7777:20180428163506p:plain

プレハブをヒエラルキービューにドラッグします。

f:id:weed_7777:20180428163628p:plain

CanvasコンポーネントのRender Modeを「Screen Space - Overlay」に変更します。

f:id:weed_7777:20180428163746p:plain

Render Modeを「World Space」に戻します。

f:id:weed_7777:20180428163845p:plain

位置や大きさなどを元の値に戻します。

f:id:weed_7777:20180428163921p:plain

f:id:weed_7777:20180509095456p:plain

これでできあがりです。

なお、ときどき接続できなくなります。そのときはHoloLensを再起動すると直ったりリビルドしたりすると直ったり…よくわかりません。もう少し調べてみます。


2018年5月9日加筆

サーバIP手動設定パネルを、サーバに接続したら非表示にし、サーバから切断されたら表示するようにしたいですよね。そのようなスクリプトを書きました:

// ManualIpConfigUtilityManager.cs

using HoloToolkit.Sharing;
using UnityEngine;

/// <summary>
/// サーバIP手動設定パネルを、サーバに接続したら非表示にし、サーバから切断されたら表示する
/// </summary>
public class ManualIpConfigUtilityManager : MonoBehaviour
{
    /// <summary>
    /// サーバIP手動設定パネルのオブジェクト
    /// 表示・非表示を切り替えるためにUnityのフィールドから設定する
    /// </summary>
    public GameObject ManualIpConfigUtility;

    /// <summary>
    /// サーバに接続したときと、サーバから切断されたときのイベントを準備する
    /// </summary>
    private void Start()
    {
        SharingStage.Instance.SharingManagerConnected += this.Connected;
        SharingStage.Instance.SharingManagerDisconnected += this.DisConnected;
    }

    /// <summary>
    /// サーバに接続したら、サーバIP手動設定パネルを消す
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Connected(object sender, System.EventArgs e)
    {
        this.ManualIpConfigUtility.SetActive(false);
    }

    /// <summary>
    /// サーバから切断されたら、サーバIP手動設定パネルを表示する
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void DisConnected(object sender, System.EventArgs e)
    {
        this.ManualIpConfigUtility.SetActive(true);
    }
}

使う際は、コンポーネントのManual Ip Config UtilityフィールドにManualIpConfigUtilityオブジェクトをドラッグしてください。