Unity调用Win32的打开和保存文件对话框

在window平台下,有时我们需要打开或则保存一些东西到指定目录下,这时我们不需要再重复造轮子,完全可以调用系统的文件窗口,具体的调用如下:

第一步:创建打开窗口和保存窗口的类。

using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
using System;

namespace Common
{
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public class FileDlg
    {
        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 
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
要在Unity中使用Win32 API打开文件浏览器,可以使用DllImport将Windows API导入Unity。以下是一个示例: ``` using System.Runtime.InteropServices; public class Win32API { [DllImport("user32.dll")] public static extern IntPtr GetActiveWindow(); [DllImport("comdlg32.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern bool GetOpenFileName([In, Out] OpenFileName ofn); } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public class OpenFileName { public int lStructSize = 0; public IntPtr hwndOwner = IntPtr.Zero; public IntPtr hInstance = IntPtr.Zero; public string lpstrFilter = null; public string lpstrCustomFilter = null; public int nMaxCustFilter = 0; public int nFilterIndex = 0; public string lpstrFile = null; public int nMaxFile = 0; public string lpstrFileTitle = null; public int nMaxFileTitle = 0; public string lpstrInitialDir = null; public string lpstrTitle = null; public int Flags = 0; public short nFileOffset = 0; public short nFileExtension = 0; public string lpstrDefExt = null; public IntPtr lCustData = IntPtr.Zero; public IntPtr lpfnHook = IntPtr.Zero; public string lpTemplateName = null; public IntPtr pvReserved = IntPtr.Zero; public int dwReserved = 0; public int FlagsEx = 0; } public class OpenFileExample : MonoBehaviour { public Material cubeMaterial; private void Start() { OpenFile(); } private void OpenFile() { OpenFileName ofn = new OpenFileName(); ofn.lStructSize = Marshal.SizeOf(ofn); ofn.lpstrFilter = "Image Files (*.png, *.jpg)\0*.png;*.jpg\0All Files (*.*)\0*.*\0"; ofn.lpstrFile = new string(new char[256]); ofn.nMaxFile = ofn.lpstrFile.Length; ofn.lpstrInitialDir = Application.dataPath; ofn.lpstrTitle = "Select an image"; ofn.Flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200; ofn.hwndOwner = Win32API.GetActiveWindow(); if (Win32API.GetOpenFileName(ofn)) { string filePath = ofn.lpstrFile.TrimEnd(new char[] { '\0' }); Texture2D texture = LoadTextureFromFile(filePath); if (texture != null) { cubeMaterial.mainTexture = texture; } } } private Texture2D LoadTextureFromFile(string filePath) { byte[] fileData = File.ReadAllBytes(filePath); Texture2D texture = new Texture2D(2, 2); if (texture.LoadImage(fileData)) { return texture; } else { return null; } } } ``` 在上面的代码中,我们定义了一个Win32API类,用于导入Windows API。我们还定义了一个OpenFileName类,用于传递打开文件对话框的参数。在OpenFileExample类中,我们使用GetOpenFileName方法打开文件对话框,并在选择文件后加载纹理并将其赋给立方体的材质。请注意,我们使用了GetActiveWindow方法来获取Unity编辑器的窗口句柄,以确保打开文件对话框正确显示在Unity编辑器中。 请确保将上面的代码添加到您的Unity项目中,并将cubeMaterial变量设置为立方体的材质。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值