编辑模式(Editor)下:
1 2 3 4 5 6 7
| string path = EditorUtility.OpenFilePanel("Load png Textures of Directory", "", ""); WWW www = new WWW("file:///" + path); Debug.Log(www.url); yield return www; gui.texture = www.texture;
|
非编辑模式
1 2 3 4 5 6 7 8 9
| OpenFileDialog diglog = new OpenFileDialog(); diglog.InitialDirectory = "file://" + UnityEngine.Application.dataPath; if(ofd.ShowDialog() == DialogResult.OK) { Debug.Log(ofd.FileName); }
|
注意: 以上操作需要添加 System.Windows.Forms.dll,放在Plugins文件夹下,同时需要更改.net 2.0 Subset为.net2.0
![http://tdou-cc.tdouguo.com/u3d_diglog/no_editor.jpg]
unity3d调用win32打开对话框
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| DllTest
using UnityEngine; using System.Collections; 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 class DllTest { [DllImport("Comdlg32.dll",SetLastError=true,ThrowOnUnmappableChar=true, CharSet = CharSet.Auto)] public static extern bool GetOpenFileName([ In, Out ] OpenFileName ofn ); public static bool GetOpenFileName1([ In, Out ] OpenFileName ofn ) { return GetOpenFileName(ofn); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| using UnityEngine;
using System.Collections;
using System.Text;
using System.Runtime.InteropServices;
using System;
public class Test : MonoBehaviour {
public GameObject plane;
void OnGUI() { if(GUI.Button(new Rect(0,0,100,35),"OpenDialog")) { OpenFileName ofn = new OpenFileName();
ofn.structSize = Marshal.SizeOf(ofn);
ofn.filter = "All Files\0*.*\0\0";
ofn.file = new string(new char[256]);
ofn.maxFile = ofn.file.Length;
ofn.fileTitle = new string(new char[64]);
ofn.maxFileTitle = ofn.fileTitle.Length;
ofn.initialDir =UnityEngine.Application.dataPath;//默认路径
ofn.title = "Open Project";
ofn.defExt = "JPG";//显示文件的类型 //注意 一下项目不一定要全选 但是0x00000008项不要缺少 ofn.flags=0x00080000|0x00001000|0x00000800|0x00000200|0x00000008;//OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST| OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR
if(DllTest.GetOpenFileName( ofn )) {
StartCoroutine(WaitLoad(ofn.file));//加载图片到panle
Debug.Log( "Selected file with full path: {0}"+ofn.file );
}
}
}
IEnumerator WaitLoad(string fileName) { WWW wwwTexture=new WWW("file://"+fileName);
Debug.Log(wwwTexture.url);
yield return wwwTexture;
plane.renderer.material.mainTexture=wwwTexture.texture; } }
|
![http://tdou-cc.tdouguo.com/u3d_diglog/u3d2win32-01.jpg]
![http://tdou-cc.tdouguo.com/u3d_diglog/u3d2win32-02.jpg]
参考知识:
- http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.inattribute%28v=vs.85%29
- http://msdn.microsoft.com/en-us/library/windows/desktop/ms646839%28v=vs.85%29.aspx
- C#和win32类型对应
- http://blog.csdn.net/wanfang323/article/details/6372995
- https://www.cnblogs.com/U-tansuo/archive/2012/07/10/GetOpenFileName.html
原文地址: 传送门