本日は hololens の技術調査枠です。
アプリの設定を外部テキストファイルとして読み込みます。
以前の assetbundle の調査結果を応用しました。
bluebirdofoz.hatenablog.com
ここで assetbundle ではなく、テキストファイルを読み込みます。
前回と同様に、UnityEditor 上では"Application.streamingAssetsPath"を参照します。
これは Unity 上の「Asset/StreamingAssets」フォルダとなります。

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

以下のようにフォルダを自動で切り替えるように実装します。
・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アプリにビルドしてみると……。

エラーが発生しました。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();今度はビルドが成功しました。

以下のような 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>