Unity3D调用系统窗口选择本地文件(PC端)

[csharp]  view plain copy
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using System;  
  4. using System.Runtime.InteropServices;  
  5.   
  6. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]  
  7.   
  8. public class OpenFileName  
  9. {  
  10.     public int structSize = 0;  
  11.     public IntPtr dlgOwner = IntPtr.Zero;  
  12.     public IntPtr instance = IntPtr.Zero;  
  13.     public String filter = null;  
  14.     public String customFilter = null;  
  15.     public int maxCustFilter = 0;  
  16.     public int filterIndex = 0;  
  17.     public String file = null;  
  18.     public int maxFile = 0;  
  19.     public String fileTitle = null;  
  20.     public int maxFileTitle = 0;  
  21.     public String initialDir = null;  
  22.     public String title = null;  
  23.     public int flags = 0;  
  24.     public short fileOffset = 0;  
  25.     public short fileExtension = 0;  
  26.     public String defExt = null;  
  27.     public IntPtr custData = IntPtr.Zero;  
  28.     public IntPtr hook = IntPtr.Zero;  
  29.     public String templateName = null;  
  30.     public IntPtr reservedPtr = IntPtr.Zero;  
  31.     public int reservedInt = 0;  
  32.     public int flagsEx = 0;  
  33. }  
  34.    
  35. public class WindowDll  
  36. {  
  37.     [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]  
  38.     public static extern bool GetOpenFileName([In, Out] OpenFileName ofn);  
  39.     public static bool GetOpenFileName1([In, Out] OpenFileName ofn)  
  40.     {  
  41.         return GetOpenFileName(ofn);  
  42.     }  
  43. }  


[csharp]  view plain copy
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using System.Runtime.InteropServices;  
  4.   
  5. public class CameraTest : MonoBehaviour  
  6. {  
  7.     public WebCamTexture cameraTexture;  
  8.     public string cameraName = "";  
  9.     private bool isPlay = false;  
  10.     // Use this for initialization  
  11.     void Start()  
  12.     {  
  13.         //StartCoroutine(OpenCamera());  
  14.     }  
  15.   
  16.     // Update is called once per frame  
  17.     void Update()  
  18.     {  
  19.   
  20.     }  
  21.     ///   
  22.     /// 获取权限打开摄像头  
  23.     ///   
  24.     ///   
  25.     IEnumerator OpenCamera()  
  26.     {  
  27.         yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);  
  28.         if (Application.HasUserAuthorization(UserAuthorization.WebCam))  
  29.         {  
  30.             WebCamDevice[] devices = WebCamTexture.devices;  
  31.             cameraName = devices[0].name;  
  32.             cameraTexture = new WebCamTexture(cameraName, 320, 240, 15);  
  33.             cameraTexture.Play();  
  34.             isPlay = true;  
  35.         }  
  36.     }  
  37.   
  38.     void OnGUI()  
  39.     {  
  40.         if (isPlay)  
  41.         {  
  42.             GUI.DrawTexture(new Rect(0, 0, 320, 240), cameraTexture, ScaleMode.ScaleAndCrop);  
  43.         }  
  44.   
  45.         if (GUI.Button(new Rect(0, 0, 100, 35), "OpenDialog"))  
  46.         {  
  47.             OpenFileName ofn = new OpenFileName();  
  48.   
  49.             ofn.structSize = Marshal.SizeOf(ofn);  
  50.   
  51.             ofn.filter = "All Files\0*.*\0\0";  
  52.   
  53.             ofn.file = new string(new char[256]);  
  54.   
  55.             ofn.maxFile = ofn.file.Length;  
  56.   
  57.             ofn.fileTitle = new string(new char[64]);  
  58.   
  59.             ofn.maxFileTitle = ofn.fileTitle.Length;  
  60.   
  61.             ofn.initialDir = UnityEngine.Application.dataPath;//默认路径  
  62.   
  63.             ofn.title = "Open Project";  
  64.   
  65.             ofn.defExt = "JPG";//显示文件的类型  
  66.             //注意 一下项目不一定要全选 但是0x00000008项不要缺少  
  67.             ofn.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;//OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST| OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR  
  68.   
  69.             if (WindowDll.GetOpenFileName(ofn))  
  70.             {  
  71.                 Debug.Log("Selected file with full path: {0}" + ofn.file);  
  72.             }  
  73.   
  74.         }  
  75.     }  
  76. }  


原文地址点击这里

文件的类型设置

[plain]  view plain copy
  1. ofn.filter = "图片文件(*.jpg*.png)\0*.jpg;*.png";  

你可能感兴趣的:(unity3d)