GJM: Unity3d打开对话框

编辑模式(Editor)下:


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;

非编辑模式


OpenFileDialog diglog = new OpenFileDialog();
diglog.InitialDirectory = "file://" + UnityEngine.Application.dataPath;  //定义打开的默认文件夹位置//定义打开的默认文件夹位置
if(ofd.ShowDialog() == DialogResult.OK)
{
    // todo: 显示打开文件的窗口
    Debug.Log(ofd.FileName);
}

注意: 以上操作需要添加 System.Windows.Forms.dll,放在Plugins文件夹下,同时需要更改.net 2.0 Subset为.net2.0

![https://img.0x96m.com/u3d_diglog/no_editor.jpg]

unity3d调用win32打开对话框

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);
    }
}

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;
    }
}

![https://img.0x96m.com/u3d_diglog/u2d2win32-01.jpg]
![https://img.0x96m.com/u3d_diglog/u2d2win32-02.jpg]

参考知识:

  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
  5. https://www.cnblogs.com/U-tansuo/archive/2012/07/10/GetOpenFileName.html

版权声明:本文为博主转载文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://tdou.cc/cn/Unity3d打开对话框/
原文地址: 传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tdou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值