在本文颖医,筆者將教大家如何置頂打包好后的(Runtime) 文件選擇/保存 窗口词身。
前言:
有不少童靴發(fā)現(xiàn) 網(wǎng)絡(luò)上給的 OpenFileDialog 解決方案無(wú)法將這個(gè)彈出的窗口置頂勺美,這就導(dǎo)致了用戶如果不小心點(diǎn)到了UnityPlayer窗口鸭你,就會(huì)使得這個(gè) OpenFileDialog 窗口被 Player覆蓋俱病。要命的是粱甫,如果這個(gè)是全屏APP,那用戶就要手忙腳亂咯耀怜。
So恢着,解決這個(gè)問(wèn)題就迫在眉睫了!
解決方案:
- 針對(duì)網(wǎng)絡(luò)上調(diào)Win32 API 喚起的文件選擇窗财破,在這個(gè)
FileOpenDialog
類型的構(gòu)造函數(shù)中加一句就能解決問(wèn)題:
public FileOpenDialog()
{
dlgOwner = GetForegroundWindow();
}
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
Tips:
-
GetForegroundWindow()
:用于獲取當(dāng)前Player窗口指針掰派。 - 使用以下API 也行!
[DllImport("user32.dll")]
private static extern IntPtr GetActiveWindow();
- 筆者稍作整理左痢,API優(yōu)化如下靡羡,GitHub倉(cāng)庫(kù)見(jiàn)擴(kuò)展閱讀1:
1.打開(kāi)文件選擇窗
string path = FileDialogForWindows.FileDialog(title,后綴);
2. 打開(kāi)文件保存窗
string path = FileDialogForWindows.SaveDialog(title, path));
- 針對(duì)使用 system.windows.form.dll 做選擇窗的筆者也試了給他傳父級(jí)窗口指針,但依舊無(wú)法置頂俊性。另外大家反應(yīng)的使用這個(gè)方式無(wú)法打包是因?yàn)樾枰褂?.NET 2.0 API 而不是其子集略步。
Ookii.Dialogs - Ookii.org - 這個(gè)是美化且可以置頂?shù)?DLL,也是 UnityStandaloneFileBrowser 中選擇的解決方案
動(dòng)畫演示:
- 演示了置頂效果
- 在編輯器下有震屏和提示音定页,但Unity2017.3打包就沒(méi)了趟薄,不過(guò)Unity2018.2.16打出來(lái)的有。
結(jié)語(yǔ):
這個(gè)簡(jiǎn)單的解決方案顯然也可以用在 所有 .Net 開(kāi)發(fā)的APP中典徊,如果解決了你的痛點(diǎn)杭煎,記得回來(lái)點(diǎn)贊讓更多人看到哦!
擴(kuò)展閱讀:
- 本文代碼整理后托管在這里啦~
- Unity中打開(kāi)文件窗口(OpenFileDialog)的幾種方法對(duì)比 - Raymond - CSDN博客 - 主要代碼來(lái)源
- winforms - How can I set topmost at the SaveFileDialog using C#? - Stack Overflow - 解決方案來(lái)源
- [Unity3D] Unity做出來(lái)的軟件怎么加文件系統(tǒng) - 簡(jiǎn)書 - 可能你需要
- [Unity3D] 拖拽文件到unity standalone App - 簡(jiǎn)書 - 可能你需要
標(biāo)簽:Unity Runtime使OpenFileDialog始終位于所有窗口的最前面,OpenFileDialog 置頂,SaveFileDialog