在本文,笔者将教大家如何置顶打包好后的(Runtime) 文件选择/保存 窗口。
前言:
有不少童靴发现 网络上给的 OpenFileDialog 解决方案无法将这个弹出的窗口置顶,这就导致了用户点到了UnityPlayer窗口就会导致 这个 OpenFileDialog 窗口被 Player覆盖。要命的是,如果这个是全屏APP,那个体验就真的非常难受了。
所以解决这个问题就迫在眉睫了!
问题脚本
using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class OpenFileName {
public int structSize = 0;
public IntPtr dlgOwner = IntPtr.Zero;
public IntPtr instance = IntPtr.Zero;
public String filter = null;
public String customFilter = null;
public int maxCustFilter = 0;
public int filterIndex = 0;
public String file = null;
public int maxFile = 0;
public String fileTitle = null;
public int maxFileTitle = 0;
public String initialDir = null;
public String title = null;
public int flags = 0;
public short fileOffset = 0;
public short fileExtension = 0;
public String defExt = null;
public IntPtr custData = IntPtr.Zero;
public IntPtr hook = IntPtr.Zero;
public String templateName = null;
public IntPtr reservedPtr = IntPtr.Zero;
public int reservedInt = 0;
public int flagsEx = 0;
}
解决方案:
public FileOpenDialog()
{
dlgOwner = GetForegroundWindow();
}
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
Tips:
在这个FileOpenDialog
类型中加一个构造函数,然后写上这一句问题解决,赶快试下吧~
动画演示:

- 演示了置顶效果
- 在编辑器下有震屏和提示音,但打包就没了。
扩展阅读:
- 本文代码整理后托管在这里啦~
- Unity中打开文件窗口(OpenFileDialog)的几种方法对比 - Raymond - CSDN博客 - 主要代码来源
- winforms - How can I set topmost at the SaveFileDialog using C#? - Stack Overflow - 解决方案来源
- [Unity3D] Unity做出来的软件怎么加文件系统 - 简书 - 可能你需要
- [Unity3D] 拖拽文件到unity standalone App - 简书 - 可能你需要
标签:Unity Runtime使OpenFileDialog始终位于所有窗口的最前面,OpenFileDialog 置顶,SaveFileDialog
网友评论