MRが楽しい

MRやVRについて学習したことを書き残す

SharingサーバのIPアドレスをテキスト設定ファイルで切り替える

本日は hololens の技術調査枠です。
前回、アプリの設定を外部テキストファイルとして読み込む方法を調査しました。
bluebirdofoz.hatenablog.com

今回はこの設定ファイルからIPアドレスを読み込み、アクセスするSharingサーバを切り替える処理を実装します。
参考にしたのは以下のサイトです。
dhero.hatenablog.com

前回の設定ファイルを変更して、SharingサーバのIPアドレスを設定できるようにします。
・AppSettingManager.cs

/// <summary>
/// アプリ設定フォーマットクラス
/// </summary>
public class AppSettings
{
    public string SharingServerAddress;
}

・settings.xml

<?xml version="1.0" encoding="utf-8"?>
<AppSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SharingServerAddress>192.168.2.100</SharingServerAddress>
</AppSettings>

次に「接続」ボタン押下時に、設定を参照してSharingサーバに再接続するメソッドを呼び出します。
f:id:bluebirdofoz:20171006230149j:plain

/// <summary>
/// Sharing接続ボタンの押下イベント
/// </summary>
public void EventConnectSharingButtonCliled()
{
    ViewerTest.UtilLog.DebugLog(this, "EventConnectSharingButtonCliled");
    string address = AppSettingManager.Instance.GetAppSettings().SharingServerAddress;
    int port = HoloToolkit.Sharing.SharingStage.Instance.ServerPort;
    HoloToolkit.Sharing.SharingStage.Instance.ConnectToServer(address, port);
}

SharingAddress に localhost、Sharingサーバのアドレスを設定したXMLファイルを用意してアプリを起動します。
f:id:bluebirdofoz:20171006230158j:plain

localhost でSharingサービスは起動していないため、実行直後は接続が成功しません。
f:id:bluebirdofoz:20171006230211j:plain

「接続」ボタンを押してSharingサービスを起動したサーバにアクセスすると……。
f:id:bluebirdofoz:20171006230219j:plain
接続に成功しました。
設定ファイルを差し替えることで、アプリの再ビルド無しにSharingサーバのアドレスを変更可能です。


因みに以下のメソッドでSharingサーバに再接続する方法ですが……現在、私は何故、これで再接続可能かは理解できていません。
・HoloToolkit.Sharing.SharingStage.Instance.ConnectToServer(address, port);

起動時にデフォルト設定で自動接続してしまうのは不便に感じていたため、これまでも起動後にサーバを切り替える方法は調べていました。
しかし以下のように、シーン切り替えやオブジェクトのActiveを駆使して、起動時の仕組みを流用する方法しか見つからず。
littlewing.hatenablog.com
mtholoblog.hatenablog.com

今回、設定ファイルについて調査したところ、棚ぼた的にこちらのメソッドを用いる方法にたどり着いたという訳です。
しかし元記事に、本メソッドを用いるに至った詳細がなかったため、内部的な動きは分からないままです。
この辺りの理解は今後の学習課題とします。

因みにhololensでの実動作はお試し済みです。複数台のhololens実機確認でも位置合わせなどの動作に問題ありませんでした。

hololensアプリでテキスト設定ファイルの読み込みを行う

本日は hololens の技術調査枠です。
アプリの設定を外部テキストファイルとして読み込みます。

以前の assetbundle の調査結果を応用しました。
bluebirdofoz.hatenablog.com

ここで assetbundle ではなく、テキストファイルを読み込みます。

前回と同様に、UnityEditor 上では"Application.streamingAssetsPath"を参照します。
これは Unity 上の「Asset/StreamingAssets」フォルダとなります。
f:id:bluebirdofoz:20171005223007j:plain

Hololens 上では"Windows.Storage.ApplicationData.Current.LocalFolder.Path"を参照します。
これは Hololens 上の「LocalAppData/AppName/LocalState」フォルダとなります。
f:id:bluebirdofoz:20171005223018j:plain

以下のようにフォルダを自動で切り替えるように実装します。
・AppSettingManager.cs

/// <summary>
/// アプリ設定ディレクトリパス
/// 実行環境によって参照ディレクトリを変更する
/// </summary>
private string SettingFileDirectoryPath()
{
    string directorypath = "";
#if WINDOWS_UWP
    // HoloLens上での動作の場合、LocalAppData/AppName/LocalStateフォルダを参照する
    directorypath = Windows.Storage.ApplicationData.Current.LocalFolder.Path;
#else
    // Unity上での動作の場合、Assets/StreamingAssetsフォルダを参照する
    directorypath = UnityEngine.Application.streamingAssetsPath;
#endif
    return directorypath;
}

設定ファイルの読み書きを作り込むのは面倒です。
今回はインスタンスXml形式で入出力する XmlSerializer クラスを利用しました。

・AppSettingManager.cs

/// <summary>
/// アプリ設定フォーマットクラス
/// </summary>
public class AppSettings
{
    public string AppName;
}

/// <summary>
/// アプリ設定読み込み(XML)
/// </summary>
/// <returns>読み込み成否</returns>
public bool XMLRead()
{
    UtilLog.DebugLog(this, "XMLRead");

    // 読み込み成否
    bool ret = false;

    // オブジェクトの型を指定して Serializer オブジェクトを作成する
    System.Xml.Serialization.XmlSerializer serializer;
    serializer = new System.Xml.Serialization.XmlSerializer(typeof(AppSettings));

    // ファイルの存在確認
    if (System.IO.File.Exists(XMLFilePath()) == true)
    {
        // 読み込みファイルを開く
        System.IO.StreamReader streamreader;
        streamreader = new System.IO.StreamReader(XMLFilePath(), new System.Text.UTF8Encoding(false));

        // XMLファイルから逆シリアル化する
        p_AppSettings = (AppSettings)serializer.Deserialize(streamreader);

        // ファイルを閉じる
        streamreader.Close();

        // 読み込み成功
        ret = true;
    }

    return ret;
}

これでUWPアプリにビルドしてみると……。
f:id:bluebirdofoz:20171005223047j:plain
エラーが発生しました。Unity 上では動くのに。

以下の記事によると、Windows Storeアプリケーションでは .CLose() メソッドや BinaryReader は使えないらしい。
qiita.com

以下の記事を参考に読み込み方法を変えてみました。
dhero.hatenablog.com


問題個所を以下の通り、修正します。
・AppSettingManager.cs

        // 読み込みファイルを開く
        System.IO.StreamReader streamreader;
        //streamreader = new System.IO.StreamReader(XMLFilePath(), new System.Text.UTF8Encoding(false));
        streamreader = new System.IO.StreamReader((System.IO.Stream)System.IO.File.OpenRead(XMLFilePath()));

        // XMLファイルから逆シリアル化する
        p_AppSettings = (AppSettings)serializer.Deserialize(streamreader);

        // ファイルを閉じる(WindowsStoreアプリではClose()メソッドは使用不可)
        //streamreader.Close();
        streamreader.Dispose();

今度はビルドが成功しました。
f:id:bluebirdofoz:20171005223059j:plain

以下のような xml ファイルを所定のフォルダに置くことで、アプリから設定読み込みが可能です。
・settings.xml

<?xml version="1.0" encoding="utf-8"?>
<AppSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <AppName>TestName</AppName>
</AppSettings>

Blenderでオブジェクトを反転コピーする

本日は blender の小ネタ枠です。
オブジェクトの反転コピーの方法について、
モディファイアを用いない方法を試したので記録しておきます。

www.youtube.com

モディファイアを利用するのに比べて手軽に実施できるので、
複数のオブジェクトを対象とする場合に便利です。

以下のような3Dモデルがあり、飛行機右側のパネルを左側にもコピーしたいとします。
f:id:bluebirdofoz:20171004091031j:plain

オブジェクトを選択して「編集モード」にします。
f:id:bluebirdofoz:20171004091042j:plain

「A」キーでオブジェクトを選択状態にします。
f:id:bluebirdofoz:20171004091055j:plain

「Shift+C」キーで3Dカーソルを原点に移動します。
f:id:bluebirdofoz:20171004091104j:plain

「.(ピリオド)」キーで回転軸を3Dカーソル位置に変更します。
(中心に戻す場合は「Ctrl+.(ピリオド)」キーです)
f:id:bluebirdofoz:20171004091147j:plain

キーを押す前は以下のようにオブジェクトの中心が回転軸になっています。
f:id:bluebirdofoz:20171004091313j:plain

キーを押すと以下のように3Dカーソルを中心に回転が行われます。
f:id:bluebirdofoz:20171004091321j:plain

「Shift+D」キーから「Enter」キーを押下してオブジェクトを複製します。
f:id:bluebirdofoz:20171004091331j:plain

「Ctrl+M」キーから「X」キーを押下してX軸方向に複製データを移動します。
f:id:bluebirdofoz:20171004091342j:plain

そのまま「P」キーを押して「選択物」をクリックします。
f:id:bluebirdofoz:20171004091350j:plain

反転コピーしたデータが別オブジェクトとして作成されました。
f:id:bluebirdofoz:20171004091358j:plain

hololens用DevicePortalの機能についてまとめる(Virtual Input[仮想入力])

DevicePortal調査枠です。
bluebirdofoz.hatenablog.com

hololens用DevicePortalの「Virtual Input(仮想入力)」ページについてまとめます。
f:id:bluebirdofoz:20171003235448j:plain

PCから hololens にキーボード入力を送信します。
表示されている情報は以下の通りです。

[Virtual keyboard] (仮想キーボード) セクション
1.[Input text] (入力テキスト)
  hololens に送信するキー入力をテキストボックスに入力します。
2.[Send] (送信)
  hololens にキー入力を送信します。
  hololens 上でアクティブなアプリにキー入力が行われます。


参考ページ
・HoloLens 用 Device Portal
 https://docs.microsoft.com/ja-jp/windows/uwp/debug-test-perf/device-portal-hololens
・Using the Windows Device Portal
 https://developer.microsoft.com/en-us/windows/mixed-reality/using_the_windows_device_portal

hololens用DevicePortalの機能についてまとめる(Networking[ネットワーキング])

DevicePortal調査枠です。
bluebirdofoz.hatenablog.com

hololens用DevicePortalの「Networking(ネットワーキング)」ページについてまとめます。
f:id:bluebirdofoz:20171002085951j:plain

hololens の Wi-Fi 接続を管理します。
表示されている情報は以下の通りです。

[WiFi adapters] (WiFiアダプタ) セクション
1.[Adapters] (アダプタ)
  ドロップダウンコントロールを使用して Wi-Fi アダプタを選択します。
2.[Profiles] (プロファイル)
  ドロップダウンコントロールを使用してプロファイルを選択します。
3.[Connect] (接続)
  選択したアダプタを使用して WiFi に接続します。

[Available networks] (利用可能なネットワーク) セクション
4.[Refresh] (更新)
  hololens が接続できるWi-Fiネットワークを一覧表示します。
  Refresh ボタンをクリックすると、リストを更新します。

[IP configuration] (IP設定) セクション
5.[Refresh] (更新)
  IPアドレスやネットワーク接続のその他の詳細を表示します。
  Refresh ボタンをクリックすると、詳細情報を更新します。


参考ページ
・Using the Windows Device Portal
 https://developer.microsoft.com/en-us/windows/mixed-reality/using_the_windows_device_portal

hololens用DevicePortalの機能についてまとめる(Simulation[シミュレーション])

DevicePortal調査枠です。
bluebirdofoz.hatenablog.com

hololens用DevicePortalの「Simulation(シミュレーション)」ページについてまとめます。
f:id:bluebirdofoz:20171001190615j:plain

テスト用に入力データを記録して再生できます。
表示されている情報は以下の通りです。

[Capture room] (ルームのキャプチャ) セクション
1.[Room Name] (ルーム名)
  キャプチャを行うルーム名を指定します。
2.[Capture] (キャプチャ)
  ルームのキャプチャを行います。
  キャプチャされたルームファイルは xef ファイルとしてPCにダウンロードされます。
  このファイルには、ユーザーの周囲の空間マッピング メッシュが含まれます。
  このファイルは、hololens エミュレーターに読み込むことができます。

[Recording] (レコーディング) セクション
3.[Recording Name] (ルーム名)
  レコーディングを行うファイル名を指定します。
4.[Record] (記録)
  指定したストリームのレコーディングを開始します。
  hololens でアクションを実行した後、Stop をクリックすると、データが xef ファイルとしてPCに保存されます。
  このファイルは、hololens エミュレーターまたはデバイスで読み込むことができます。

[Playback] (再生) セクション
5.[Upload Recording] (レコードのアップロード)
  PCからレコーディングした xef ファイルを選択し、hololens にデータを送信します。

[Control mode] (制御モード) セクション
6.[Control mode] (制御モード)
  hololens のモードを選択します。
  ・Default:通常の操作モード
  ・Simulation:シミュレーションモード
7.[Set]
  hololens のモードを切り替えます。
  Simulation を選んだ状態で Set をクリックすると、アップロードされたシミュレーションデータが再生されます。
  hololens の実際のセンサーは無効になり、Default に戻すまで、hololens は実際のユーザーに応答しません。



参考ページ
・HoloLens 用 Device Portal
 https://docs.microsoft.com/ja-jp/windows/uwp/debug-test-perf/device-portal-hololens
・Using the Windows Device Portal
 https://developer.microsoft.com/en-us/windows/mixed-reality/using_the_windows_device_portal

HoloLensの開発環境構築手順 MovieStudio編

前回の Bandicam に引き続き、ゲーム動画を作成するための環境構築手順です。
bluebirdofoz.hatenablog.com

画質や字幕など、動画の見栄えを気にするならば録画ツールだけでは不十分です。
今回は動画の編集ツールである MovieStudio のインストール手順を記録しておきます。

www.sourcenext.com

何故 MovieStudio かと言えば筆者が古いバージョンのライセンスを持っていたからです。
一般的には無償の AviUtl というツールがよく用いられるようです。
所持しているバージョンがそれなりに古いので問題があるようなら改めて AviUtl を使ってみます。


インストールDVDを起動してセットアップ画面を開きます。
「Movie Studio HD のインストール」を選択します。
f:id:bluebirdofoz:20170930194801j:plain

インストーラが起動するので「次へ」をクリックします。
f:id:bluebirdofoz:20170930194809j:plain

ライセンス規約が表示されるので「同意する」を選択して「次へ」をクリックします。
f:id:bluebirdofoz:20170930194816j:plain

必要なコンポーネントを選択とインストール先を設定して「インストール」をクリックします。
インストールが開始されます。
f:id:bluebirdofoz:20170930194825j:plain

以上でインストールは完了です。
(画像差し込み_25)


有償ツールなので初期起動時にアカウント登録が求められます。
f:id:bluebirdofoz:20170930194837j:plain

シリアル番号を入力して「次へ」をクリックします。
f:id:bluebirdofoz:20170930194844j:plain

環境に応じて登録を実施します。
f:id:bluebirdofoz:20170930194855j:plain

以上で登録完了です。ツールが利用できるようになりました。
f:id:bluebirdofoz:20170930194904j:plain

因みに動画サイトにアップロードする際のレンダリングの設定は以下が良いらしい。
Sony AVC/MVC(.mp4):インターネット1920×1080-30p
f:id:bluebirdofoz:20170930194912j:plain

ch.nicovideo.jp