UnityStandaloneFileBrowser
UnityStandaloneFileBrowser copied to clipboard
How to start a FilePicker in separate thread/Coroutine?
Opening the file picker panel halts the entire unity application, even if started in Coroutine or while using OpenFilePickerAsync().
Is it possible to open a instance that is decoupled from the rest of the application?
This apparently only happens in Windows. Unless you want to directly change code inside UnityStandaloneFileBrowser, you have treat calls differently on Windows.
Here is my solution for it:
void ShowDialog(string title)
{
#if PLATFORM_STANDALONE_WIN
Task.Run(() => StandaloneFileBrowser.OpenFilePanel(title, "", "", false)).ContinueWithOnMainThread(OnCallbackTask);
#else
StandaloneFileBrowser.OpenFilePanelAsync(title, "", "", false, OnCallback);
#endif
}
private void OnCallbackTask(Task<string[]> task)
{
if (task.Exception != null)
{
// Some kind of exception happened in OpenFilePanel, somehow. Treat it however you see fit here.
OnCallback([]);
}
else
{
OnCallback(task.Result);
}
}
private void OnCallback(string[] paths)
{
// Our usual callback
}
Note that it seems that the Unity app cannot close while the file dialog is still open - it will just hang if you press Alt+F4 until the dialog is closed. I haven't found a solution for that yet.