zoukankan      html  css  js  c++  java
  • unity3d各种OpenFileDialog操作

    http://www.cnblogs.com/U-tansuo/archive/2012/07/10/GetOpenFileName.html

    1 编辑模式(Editor)下:

    string path = EditorUtility.OpenFilePanel("Load png Textures of Directory", "", "");
    WWW ww=new WWW("file:///"+path);
    print(ww.url);
    yield return ww;
    gui.texture=ww.texture;
    2.非编辑模式:
    复制代码
    OpenFileDialog ofd = new OpenFileDialog();   //new一个方法
     ofd.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 

     

    3、unity3d调用win32打开对话框

    复制代码
    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);
        }
    }
    复制代码

     

    复制代码
    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*.*";
    
                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;
        }
    }

    参考知识:1、http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.inattribute%28v=vs.85%29
    2、http://msdn.microsoft.com/en-us/library/windows/desktop/ms646839%28v=vs.85%29.aspx
    3、C#和win32类型对应
    4、http://blog.csdn.net/wanfang323/article/details/6372995

     

     
    复制代码
  • 相关阅读:
    -webkit-margin-before 及 扩展浏览器前缀、内核
    vue封装分页组件
    vue项目中使用qrcode生成二维码
    git中全局设置用户名、邮箱
    promise.all 解说
    超详细弹性盒子布局
    js对象转数组
    js取整数、取余数的方法
    数组方法大全
    Vue绑定class
  • 原文地址:https://www.cnblogs.com/nafio/p/9137099.html
Copyright © 2011-2022 走看看