当前位置: 首页 > news >正文

Unity 3D调用Windows打开、保存窗口、文件浏览器

Unity调用Window窗口


本文提供全流程,中文翻译。

Chinar 坚持将简单的生活方式,带给世人!

(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)



Chinar —— 心分享、心创新!

助力快速完成 Unity调用 Window api 执行保存/打开操作

为新手节省宝贵的时间,避免采坑!


Chinar 教程效果:
这里写图片描述


  • 1
    • File Controller —— 文件控制脚本
  • 2
    • FileDlog —— 文件日志
  • 支持
    • May Be —— 搞开发,总有一天要做的事!


全文高清图片,点击即可放大观看 (很多人竟然不知道)


1

File Controller —— 文件控制脚本


用来控制打开/保存项目文件

将两个脚本放到项目中,分别绑定2个按钮 打开/保存

ChinarFileController 脚本需要挂载到空物体上

即可正常调用

具体需求,需要自己来定,保存到某个路径下
举个栗子黑白88

using UnityEngine;
using System.Runtime.InteropServices;
using System;


/// <summary>
/// 文件控制脚本
/// </summary>
public class ChinarFileController : MonoBehaviour
{
    /// <summary>
    /// 打开项目
    /// </summary>
    public void OpenProject()
    {
        OpenFileDlg pth  = new OpenFileDlg();
        pth.structSize   = Marshal.SizeOf(pth);
        pth.filter       = "All files (*.*)|*.*";
        pth.file         = new string(new char[256]);
        pth.maxFile      = pth.file.Length;
        pth.fileTitle    = new string(new char[64]);
        pth.maxFileTitle = pth.fileTitle.Length;
        pth.initialDir   = Application.dataPath.Replace("/", "\\") + "\\Resources"; //默认路径
        pth.title        = "打开项目";
        pth.defExt       = "dat";
        pth.flags        = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;
        if (OpenFileDialog.GetOpenFileName(pth))
        {
            string filepath = pth.file; //选择的文件路径;  
            Debug.Log(filepath);
        }
    }


    /// <summary>
    /// 保存文件项目
    /// </summary>
    public void SaveProject()
    {
        SaveFileDlg pth  = new SaveFileDlg();
        pth.structSize   = Marshal.SizeOf(pth);
        pth.filter       = "All files (*.*)|*.*";
        pth.file         = new string(new char[256]);
        pth.maxFile      = pth.file.Length;
        pth.fileTitle    = new string(new char[64]);
        pth.maxFileTitle = pth.fileTitle.Length;
        pth.initialDir   = Application.dataPath; //默认路径
        pth.title        = "保存项目";
        pth.defExt       = "dat";
        pth.flags        = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;
        if (SaveFileDialog.GetSaveFileName(pth))
        {
            string filepath = pth.file; //选择的文件路径;  
            Debug.Log(filepath);
        }
    }
}

2

FileDlog —— 文件日志


无需挂载到空物体上
举个栗子黑白88

using System.Runtime.InteropServices;
using System;


/// <summary>
/// 文件日志类
/// </summary>
// [特性(布局种类.有序,字符集=字符集.自动)]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class ChinarFileDlog
{
    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;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class OpenFileDlg : ChinarFileDlog
{
}

public class OpenFileDialog
{
    [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
    public static extern bool GetOpenFileName([In, Out] OpenFileDlg ofd);
}

public class SaveFileDialog
{
    [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
    public static extern bool GetSaveFileName([In, Out] SaveFileDlg ofd);
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class SaveFileDlg : ChinarFileDlog
{
}

运行效果:
这里写图片描述


支持

May Be —— 搞开发,总有一天要做的事!


拥有自己的服务器,无需再找攻略!

Chinar 提供一站式教程,闭眼式创建!

为新手节省宝贵时间,避免采坑!


先点击领取 —— 阿里全产品优惠券 (享受最低优惠)


1 —— 云服务器超全购买流程 (新手必备!)

2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)

3—— Windows 服务器配置、运行、建站一条龙 !

4 —— Linux 服务器配置、运行、建站一条龙 !



70

Chinar


END

本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

转载于:https://www.cnblogs.com/chinarbolg/p/9601432.html

相关文章:

  • Snapchat为Mac、Windows平台推出AR新工具,方便用户创造实景物体
  • 2003系统创建软RAID磁盘阵列完全手册
  • 如何解决临时空间暴增导致磁盘满问题?
  • 网络负载平衡
  • Linux的基本指令--目录和文件和文件属性和文件用户组
  • Hessian解析及应用(整合Spring)
  • 用Qemu运行/调试arm linux【转】
  • OpenCV 2.4+ C++ SVM文字识别
  • 深入剖析 iOS 性能优化
  • AIX学习之—存储管理(LVM)
  • KEUC首次落地中国,网易云深度剖析Kubernetes优化与实践
  • 当人工智能遇上区块链,会发生什么?
  • 2012年最受欢迎的PHP框架
  • 高西庆:对区块链加以规范有利于财富公平公正分配
  • Linux(Ubuntu)解决乱码问题
  • Angularjs之国际化
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Markdown 语法简单说明
  • MySQL几个简单SQL的优化
  • nodejs实现webservice问题总结
  • PhantomJS 安装
  • python3 使用 asyncio 代替线程
  • React as a UI Runtime(五、列表)
  • Shadow DOM 内部构造及如何构建独立组件
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 关于extract.autodesk.io的一些说明
  • 前端
  • 微信小程序填坑清单
  • 学习笔记:对象,原型和继承(1)
  • 【干货分享】dos命令大全
  • 【云吞铺子】性能抖动剖析(二)
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #pragam once 和 #ifndef 预编译头
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (1)常见O(n^2)排序算法解析
  • (Java)【深基9.例1】选举学生会
  • (pojstep1.1.2)2654(直叙式模拟)
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (转)Mysql的优化设置
  • (转)scrum常见工具列表
  • .net core控制台应用程序初识
  • .net 使用ajax控件后如何调用前端脚本
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net反编译工具
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法