Unity打开电脑本地文件夹选择图片替换
创建工程添加对应的UI如图所示
创建ChangeImage脚本来监听按钮事件
/****************************************************
文件:ChangeImage.cs
作者:Mark
日期:#CreateTime#
功能:用于替换图片
*****************************************************/usingSystem;usingSystem.Collections;usingSystem.Runtime.InteropServices;usingUnityEngine;usingUnityEngine.Networking;usingUnityEngine.UI;publicclassChangeImage:MonoBehaviour{publicImage currentImage;//当前图片publicButton selectBtn;//选择图片的按钮privatevoidStart(){
selectBtn.onClick.AddListener(OnSelectBtnOnclick);//监听按是否被按下,按下则执行括号中的方法}//当按钮被按下时执行该脚本,打开本地文件夹privatevoidOnSelectBtnOnclick(){OpenFileName ofn =newOpenFileName();
ofn.structSize = Marshal.SizeOf(ofn);//可进行修改选择的文件类型
ofn.filter ="图片文件(*.jpg*.png)\0*.jpg;*.png";
ofn.file =newstring(newchar[256]);
ofn.maxFile = ofn.file.Length;
ofn.fileTitle =newstring(newchar[64]);
ofn.maxFileTitle = ofn.fileTitle.Length;string path = Application.streamingAssetsPath;
path = path.Replace('/','\\');//默认路径
ofn.initialDir = path;
ofn.title ="选择需要替换的图片";
ofn.defExt ="JPG";//显示文件的类型//注意 一下项目不一定要全选 但是0x00000008项不要缺少
ofn.flags =0x00080000|0x00001000|0x00000800|0x00000200|0x00000008;//OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST| OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIRif(WindowDll.GetOpenFileName(ofn)){StartCoroutine(LoadTextrue(ofn.file));}}//加载选择的图片并进行替换 IEnumerator LoadTextrue(string path){UnityWebRequest unityWebRequest =newUnityWebRequest("file:///"+ path);DownloadHandlerTexture handlerTexture =newDownloadHandlerTexture(true);
unityWebRequest.downloadHandler = handlerTexture;yieldreturn unityWebRequest.SendWebRequest();if(unityWebRequest.isNetworkError || unityWebRequest.isHttpError){print(unityWebRequest.error);}else{Texture2D t = handlerTexture.texture;//将选择的图片替换上去
currentImage.sprite = Sprite.Create(t,newRect(0,0, t.width, t.height), Vector2.one);}}}
其中OpenFileName 的类为打开windows文件夹的类 不需要任何操作 复制即用
创建OpenFileName脚本
/****************************************************
文件:OpenFileName.cs
作者:Mark
日期:#CreateTime#
功能:打开文件夹
*****************************************************/usingSystem;usingSystem.Runtime.InteropServices;[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]publicclassOpenFileName{publicint structSize =0;publicIntPtr dlgOwner = IntPtr.Zero;publicIntPtr instance = IntPtr.Zero;publicString filter =null;publicString customFilter =null;publicint maxCustFilter =0;publicint filterIndex =0;publicString file =null;publicint maxFile =0;publicString fileTitle =null;publicint maxFileTitle =0;publicString initialDir =null;publicString title =null;publicint flags =0;publicshort fileOffset =0;publicshort fileExtension =0;publicString defExt =null;publicIntPtr custData = IntPtr.Zero;publicIntPtr hook = IntPtr.Zero;publicString templateName =null;publicIntPtr reservedPtr = IntPtr.Zero;publicint reservedInt =0;publicint flagsEx =0;}publicclassWindowDll{[DllImport("Comdlg32.dll", SetLastError =true, ThrowOnUnmappableChar =true, CharSet = CharSet.Auto)]publicstaticexternboolGetOpenFileName([In,Out]OpenFileName ofn);publicstaticboolGetOpenFileName1([In,Out]OpenFileName ofn){returnGetOpenFileName(ofn);}}
将代码挂在到窗口,点击运行
本文转载自: https://blog.csdn.net/weixin_40486360/article/details/126816480
版权归原作者 小马学习笔记 所有, 如有侵权,请联系我们删除。
版权归原作者 小马学习笔记 所有, 如有侵权,请联系我们删除。