MRが楽しい

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

hololensアプリでXML設定ファイルの操作を行う その2(書き込み)

本日は HoloLens の技術調査枠です。
前回、HoloLens での設定ファイル読み込みについて調査を行いました。
今回は書き込み動作について確認を行います。
bluebirdofoz.hatenablog.com

前回作成したスクリプトに以下のファイル書き込み処理を追加します。
・AppSettingManager.cs

/// <summary>
/// アプリ設定書き込み(XML)
/// </summary>
/// <returns>書き込み成否</returns>
public bool XMLWrite()
{
    Debug.Log("XMLWrite");

    // 書き込み成否
    bool ret = false;

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

    // ディレクトリの存在確認
    if (System.IO.Directory.Exists(SettingFileDirectoryPath()) == true)
    {
        // 書き込みファイルを開く
        System.IO.StreamWriter streamwriter;
#if WINDOWS_UWP
        // 書き込みファイルを開く(UWPアプリではStreamWriter(filepath)メソッドは使用不可)
        streamwriter = new System.IO.StreamWriter((System.IO.Stream)System.IO.File.OpenWrite(XMLFilePath()));
#else
        // 書き込みファイルを開く
        streamwriter = new System.IO.StreamWriter(XMLFilePath(), false, new System.Text.UTF8Encoding(false));
#endif

        // シリアル化してXMLファイルに保存する
        serializer.Serialize(streamwriter, p_AppSettings);

#if WINDOWS_UWP
        // ファイルを閉じる(UWPアプリではClose()メソッドは使用不可)
        streamwriter.Dispose();
#else
        // ファイルを閉じる
        streamwriter.Close();
#endif

        // 書き込み成功
        ret = true;
    }
    return ret;
}

確認用にアプリの起動回数を記述するタグと表示を追加します。
f:id:bluebirdofoz:20171222091233j:plain
・AppSettingManager.cs

/// <summary>
/// 設定ファイル構造クラス
/// </summary>
public class AppSettings
{
    /// <summary>
    /// アプリ実行カウント
    /// </summary>
    public int ExecuteCount;
    /// <summary>
    /// アプリ表示メッセージ
    /// </summary>
    public string Message;
}

前回作成した処理部分に、起動と同時にカウンタを読み込み、インクリメントして書き出す処理を追加します。
・PanelTextController

/// <summary>
/// カウント出力ゲームオブジェクト
/// </summary>
public GameObject CountTextObject;

/// <summary>
/// カウントテキストUI
/// </summary>
private UnityEngine.UI.Text p_CountText;

/// <summary>
/// 初期化関数(Start)
/// </summary>
void Start ()
{
    // カウントテキストUI参照の取得
    p_CountText = CountTextObject.GetComponent<UnityEngine.UI.Text>();
    // メッセージテキストUI参照の取得
    p_MessageText = MessageTextObject.GetComponent<UnityEngine.UI.Text>();
    // アプリ設定マネージャの取得
    p_AppSettingManager = AppSettingsObject.GetComponent<AppSettingManager>();
    // アプリ設定の取得文字列をテキストに反映
    p_MessageText.text = p_AppSettingManager.GetAppSettings().Message;
    // アプリ設定のカウントのインクリメント
    p_AppSettingManager.GetAppSettings().ExecuteCount++;
    // アプリ設定のカウントをテキストに反映
    p_CountText.text = "EXE_COUNT : " + p_AppSettingManager.GetAppSettings().ExecuteCount;
    // アプリ設定を書き出す
    p_AppSettingManager.XMLWrite();
}

最後にスクリプトにテキストオブジェクトの参照を渡し、 Assets/StreamingAssets ディレクトリに以下の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">
  <ExecuteCount>0</ExecuteCount>
  <Message>Hello World</Message>
</AppSettings>

f:id:bluebirdofoz:20171222091247j:plain

アプリを起動すると、カウントが表示されます。
f:id:bluebirdofoz:20171222091256j:plain
この後、settings.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">
  <ExecuteCount>1</ExecuteCount>
  <Message>Hello World</Message>
</AppSettings>

起動回数「1」が書き込まれていました。成功です。

続けて HoloLens 上での動作についても確認します。
試しに、起動・停止を繰り返すと3回目の起動時には……。
f:id:bluebirdofoz:20171222091307j:plain
起動カウントが「3」回になっています。成功しました。
設定ファイルの他、アプリの状態保持にも使えそうです。