原文地址: unity打開資源管理器主要通過C#自帶的OpenFileName腳本。 實現打開資源管理器並選擇文件的腳本。 ...
原文地址:
unity打開資源管理器主要通過C#自帶的OpenFileName腳本。
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 WindowDll { [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); } }
實現打開資源管理器並選擇文件的腳本。
using UnityEngine; using System.Collections; using System.Runtime.InteropServices; using System.Reflection; public class CameraTest : MonoBehaviour { public WebCamTexture cameraTexture; public Transform plane; public string cameraName = ""; private bool isPlay = false; // Use this for initialization void Start() { //StartCoroutine(OpenCamera()); } // Update is called once per frame void Update() { } /// <summary> /// 獲取許可權打開攝像頭 /// </summary> /// <returns></returns> IEnumerator OpenCamera() { yield return Application.RequestUserAuthorization(UserAuthorization.WebCam); if (Application.HasUserAuthorization(UserAuthorization.WebCam)) { WebCamDevice[] devices = WebCamTexture.devices; cameraName = devices[0].name; cameraTexture = new WebCamTexture(cameraName, 320, 240, 15); cameraTexture.Play(); isPlay = true; } } void OnGUI() { if (isPlay) { GUI.DrawTexture(new Rect(0, 0, 500, 500), cameraTexture, ScaleMode.ScaleAndCrop); } 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.filter = "圖片文件(*.jpg*.png)\0*.jpg;*.png"; ofn.file = new string(new char[256]); ofn.maxFile = ofn.file.Length; ofn.fileTitle = new string(new char[64]); ofn.maxFileTitle = ofn.fileTitle.Length; string path = Application.streamingAssetsPath; path = path.Replace('/', '\\'); //預設路徑 ofn.initialDir = path; //ofn.initialDir = "D:\\MyProject\\UnityOpenCV\\Assets\\StreamingAssets"; 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 (WindowDll.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.GetComponent<Renderer>().material.mainTexture = wwwTexture.texture; } }