HoloLens RS4からファイルエクスプローラーが標準で搭載されるようになり,Unity内でも利用が可能になりました.
(2018/09/12追記)#ifの記述を変更したらIL2CPPでも動作することが確認できました.
UNITY_UWP
→WINDOWS_UWP
に変更してください
https://github.com/Microsoft/MixedRealityToolkit-Unity/blob/master/CodingGuidelines.md
動作環境
- Unity 2017.4.8f1
- Visual Studio 2017
- HoloLens RS4
動作方法
Build設定
- Build TypeはD3Dで動作可能
Build設定のPlayerSettings/Other Settings/Scripting Backendを.NETに変更
- ファイルにアクセスするのでPlayerSettings/Publishing Settings/CapabilitiesからLibraryのチェックを入れておく
処理内容
FilePickerの処理をUWP側で非同期で行われます.
123
|
#if UNITY_UWP
using Windows.Storage.Pickers;
#endif
|
↓
1234
|
#if WINDOWS_UWP
using System;
using Windows.Storage.Pickers;
#endif
|
FilePickerの呼び出しと利用はUnityのMainThreadでは行えないためUIThreadにて動作させる必要があります.
適当な関数内で以下を呼び出してください.
1 2 3 4 5 6 7 8 91011121314
|
// 処理をUIのThreadに移動させる
UnityEngine.WSA.Application.InvokeOnUIThread(async () =>
{
#if UNITY_UWP
var filepicker = new FileOpenPicker();
filepicker.FileTypeFilter.Add("*");
var file = await filepicker.PickSingleFileAsync(); // FilePickerを起動して選択されるのを待つ
UnityEngine.WSA.Application.InvokeOnAppThread(() =>
{
// 処理をUnityのThread戻す
Debug.Log((file != null) ? file.Name : "No data");
}, false);
#endif
}, false);
|
↓
1 2 3 4 5 6 7 8 91011121314
|
// 処理をUIのThreadに移動させる
UnityEngine.WSA.Application.InvokeOnUIThread(async () =>
{
#if WINDOWS_UWP
var filepicker = new FileOpenPicker();
filepicker.FileTypeFilter.Add("*");
var file = await filepicker.PickSingleFileAsync(); // FilePickerを起動して選択されるのを待つ
UnityEngine.WSA.Application.InvokeOnAppThread(() =>
{
// 処理をUnityのThread戻す
Debug.Log((file != null) ? file.Name : "No data");
}, false);
#endif
}, false);
|
Scripting BackendをIL2CPPにすると動作しませんでした.
- IL2CPPでも動いた
- カメラが起動しているとFilePickerが正常に起動しない場合がある
- FilePickerの詳細に関してはリファレンスから確認できます.
- FilePickerの動作Threadは以下を参考にしてます.(Store処理もできる)
まとめ