本日は 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>