Unity 读取、写入自定义路径文件,调用System.Windows.Forms

Unity 读取、写入自定义路径文件,调用System.Windows.Forms

原创  2015年08月27日 17:00:55
  • 2726

调用System.Windows.Forms DLL

首先在Unity新建Plugins文件夹添加System.Windows.Forms.dll

然后代码中添加引用

[csharp]  view plain  copy
 
  1. using System;  
  2. using UnityEngine;  
  3. using System.Collections;  
  4. using System.Collections.Generic;  
  5. using System.Windows.Forms;  
  6. using System.IO;  
  7.   
  8. public class FileMenu : MonoBehaviour  
  9. {  
  10.     #region Public  
  11.     public UIButton BtnNew;  
  12.     public UIButton BtnOpen;  
  13.     public UIButton BtnSave;  
  14.     public UIButton BtnSaveAs;  
  15.     public UIButton BtnClose;  
  16.     #endregion  
  17.  
  18.     #region private  
  19.       
  20.     SaveFileDialog saveLog;  
  21.     StreamReader sr;  
  22.     StreamWriter sw;  
  23.     string strSendTxt;  
  24.     UIPaneAuto uiPanelAuto;//一个显示文本和输入文本的文本框所在的类  
  25.     #endregion  
  26.   
  27.     void Awake()  
  28.     {  
  29.         uiPanelAuto = transform.GetComponent<UIPaneAuto>();  
  30.         BtnNew = GameObject.Find("UI Root/Camera/PanelTop/LstBtn/BtnNew").GetComponent<UIButton>();  
  31.         BtnOpen = GameObject.Find("UI Root/Camera/PanelTop/LstBtn/BtnOpen").GetComponent<UIButton>();  
  32.         BtnSave = GameObject.Find("UI Root/Camera/PanelTop/LstBtn/BtnSave").GetComponent<UIButton>();  
  33.         BtnSaveAs = GameObject.Find("UI Root/Camera/PanelTop/LstBtn/BtnSaveAs").GetComponent<UIButton>();  
  34.         BtnClose = GameObject.Find("UI Root/Camera/PanelTop/LstBtn/BtnClose").GetComponent<UIButton>();  
  35.         EventDelegate.Add(BtnNew.onClick, fnNew);  
  36.         EventDelegate.Add(BtnOpen.onClick, fnOpen);  
  37.         EventDelegate.Add(BtnSave.onClick, fnSave);  
  38.         EventDelegate.Add(BtnSaveAs.onClick, fnSave);  
  39.         EventDelegate.Add(BtnClose.onClick, fnClose);  
  40.     }  
  41.   
  42.       
  43.   
  44.     void fnNew()  
  45.     {  
  46.         Debug.Log("New");  
  47.         uiPanelAuto.fnSetInputTxt("");  
  48.     }  
  49.   
  50.     void fnOpen()  
  51.     {  
  52.         Debug.Log("Open");  
  53.         try  
  54.         {  
  55.             OpenFileDialog opLog = new OpenFileDialog();  
  56.             opLog.InitialDirectory = UnityEngine.Application.dataPath;  
  57.             opLog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";  
  58.             DialogResult result = opLog.ShowDialog();  
  59.             if (result == DialogResult.OK)  
  60.             {  
  61.                 string path = opLog.FileName;  
  62.                 Debug.Log(path);  
  63.                 sr = File.OpenText(path);  
  64.   
  65.                 string line;  
  66.                 BetterList<string> lst = new BetterList<string>();  
  67.                 strSendTxt = "";  
  68.                 while ((line = sr.ReadLine()) != null)  
  69.                 {  
  70.                     lst.Add(line);  
  71.                 }  
  72.                 foreach (string s in lst)  
  73.                 {  
  74.                     strSendTxt += s+"\n";  
  75.                 }  
  76.                 uiPanelAuto.fnSetInputTxt(strSendTxt);  
  77.                 sr.Close();  
  78.                 sr.Dispose();  
  79.             }  
  80.         }  
  81.         catch(Exception e)  
  82.         {  
  83.             Debug.Log("打开错误:"+e.Message);  
  84.             return;  
  85.         }  
  86.     }  
  87.   
  88.     void fnSave()  
  89.     {  
  90.             Debug.Log("Save");  
  91.             SaveFileDialog saveLog = new SaveFileDialog();  
  92.             saveLog.InitialDirectory = UnityEngine.Application.dataPath;  
  93.             saveLog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";  
  94.             DialogResult result = saveLog.ShowDialog();  
  95.             if (result == DialogResult.OK)  
  96.             {  
  97.                 Debug.Log(saveLog.FileName);  
  98.                 FileInfo f = new FileInfo(saveLog.FileName);  
  99.                 if (f.Exists)  
  100.                 {  
  101.                     f.Delete();//如果存在同名文本,就删除它重新建一个  
  102.                     f = new FileInfo(saveLog.FileName);  
  103.                     sw = f.AppendText();  
[csharp]  view plain  copy
 
  1.             //将LstIptChect中的数据添加到Txt中  
  2.                     foreach (string s in uiPanelAuto.lstIptCheck)  
  3.                     {  
  4.                         Debug.Log(s);  
  5.                         sw.WriteLine(s);  
  6.                     }  
  7.                     sw.Close();  
  8.                     sw.Dispose();  
  9.                 }  
  10.                 else  
  11.                 {  
  12.                     sw = f.AppendText();  
  13.                      foreach (string s in uiPanelAuto.lstIptCheck)  
  14.                     {  
  15.                         Debug.Log(s);  
  16.                         if(s!="")  
  17.                         sw.WriteLine(s);  
  18.                     }  
  19.                     sw.Close();  
  20.                     sw.Dispose();  
  21.                 }  
  22.             }  
  23.         }  
  24.     }  
  25.   
  26.     void fnClose()  
  27.     {  
  28.         Application.Quit();  
  29.     }  
  30. }  
[csharp]  view plain  copy
 
  1.   
[csharp]  view plain  copy
 
  1. </pre><pre class="csharp" name="code"></pre><pre class="csharp" name="code">  

 

 

 

 

Unity与Windows系统交互:三种实现原生文件对话框方案详解 在软件开发中,系统级交互是扩展应用功能边界的关键技术,尤其在需要深度集成操作系统特性的场景下。其核心原理是通过托管代码与非托管API之间的通信桥梁,实现跨环境的功能调用。对于Unity开发者而言,掌握系统交互技术能显著提升应用的桌面集成能力,为工具链开发、生产力应用构建提供底层支持。本文聚焦于Unity与Windows操作系统的深度交互,通过对比分析三种主流技术方案:直接引用.NET Framework的System.Windows.Forms、通过P/Invoke调用Win32原生API,以及使用第三方插 阅读详情

相关推荐

Unity跨平台原生文件对话框插件StandaloneFileBrowser实战指南

在桌面应用开发中,文件对话框是用户与本地文件系统交互的基础组件,其核心原理是通过操作系统提供的原生API实现文件选择与保存功能。从技术价值看,原生对话框不仅能提供符合用户操作习惯的交互体验,还能确保最佳的性能与稳定性。在跨平台开发场景下,直接调用各平台原生API(如Windows的Win32 API、macOS的Cocoa框架、Linux的GTK/命令行工具)需要处理复杂的平台差异,这催生了StandaloneFileBrowser这样的封装解决方案。该插件通过统一的C# API抽象了底层平台实现,让开发者

weixin_34242509的博客 399

【Unity】使用 System.Windows.Forms 的问题

因为最近开发需要用到使用 Windows 自带的窗口打开、文件选择等功能,然后兜兜转转需要使用System.Windows.Forms 这个库。这个库在 WinForm 里是很常见的,但是要在 Unity 里使用,并打包出来还是有些坑的。

魔术师Dix的博客 7874

Unity跨平台文件浏览器插件:从原理到实战的完整指南

在软件开发中,文件系统交互是基础且关键的技术需求,涉及数据持久化、用户自定义内容加载等核心场景。其原理是通过操作系统API或自定义UI实现用户与本地存储的桥梁,技术价值在于提升应用的专业性和用户体验,避免平台差异带来的开发障碍。在Unity引擎中,原生文件对话框存在平台限制和运行时不可用等问题,因此跨平台文件浏览器插件成为工程实践中的重要解决方案。这类插件通过双轨制策略,在支持原生调用的平台上使用系统对话框,在不支持的平台上回退到仿真UI实现,确保了Windows、macOS、Linux乃至WebGL和移动

weixin_33858485的博客 463

unity中添加System.Windows.Forms

然后代码添加引用 using System.Windows.Forms.dll;Unity安装目录\Editor\Data\Mono\lib\mono\2.0。Copy到unity工程下Assets下的新建文件夹Plugins中。

梦想是世界和平 729

Unity跨平台文件对话框解决方案:Standalone File Browser插件实战指南

在桌面应用开发中,实现与操作系统文件系统的交互是基础且关键的需求,这通常通过调用原生文件对话框来完成。其原理是应用程序通过系统API唤起由操作系统提供的标准界面,以确保一致的用户体验和权限管理。这项技术的核心价值在于,它允许开发者以统一、安全的方式访问本地文件系统,而无需处理不同平台底层API的复杂性。在游戏开发、工具软件、媒体编辑器等应用场景中,文件选择与保存功能不可或缺。本文聚焦于Unity引擎的跨平台开发,深入探讨了如何利用Standalone File Browser插件解决在打包后的独立可执行文件

weixin_34224941的博客 485

Unity跨平台文件对话框全攻略:从EditorUtility到第三方插件

文件对话框是连接应用程序与操作系统文件系统的关键接口,其核心原理是通过调用平台原生API,为用户提供可视化文件选择与保存界面。在游戏开发与桌面应用中,该功能是实现数据导入导出、资源加载、配置管理等场景的基础技术。Unity引擎本身未提供跨平台运行时文件对话框,开发者需根据目标平台选择不同方案:编辑器内可使用EditorUtility,Windows平台可调用System.Windows.Forms,而跨平台项目则需借助第三方插件或平台特定API。理解各方案的原理与限制,并采用异步操作与统一接口封装,能有效提

weixin_29008691的博客 222

Unity调用Windows弹框(User32.dll/System.Windows.Forms.dll)

switch (MsgBoxBase.Show("Chinar,是 | 否,灯泡", GetType().Name, WinForms.MessageBoxButtons.YesNo, WinForms.MessageBoxIcon.Information))MsgBoxBase.Show("Chinar,OK按钮,警告", GetType().Name, WinForms.MessageBoxButtons.OK, WinForms.MessageBoxIcon.Warning);print("对");

GarFe的博客 3727

Unity跨平台文件选择方案:Standalone File Browser插件实战指南

在跨平台应用开发中,文件系统访问是一个基础且关键的技术需求,它直接关系到应用的数据导入导出、资源管理和用户自定义内容加载等核心功能。其原理在于通过统一的API抽象层,屏蔽不同操作系统(如Windows、macOS、Linux)及运行时环境(如WebGL、Android、iOS)底层原生文件对话框调用的差异,从而实现“一次编写,处处运行”的跨平台兼容性。这项技术的核心价值在于极大提升了开发效率与代码可维护性,避免了为每个平台单独开发原生插件所带来的巨大工作量。其典型应用场景包括Unity游戏开发中的存档管理、

weixin_34128839的博客 428

unity中引用 System.Windows.Forms报错

不过我添加引用后报错依然没解决unity报错:The type or namespace name `Windows' does not exist in the namespace `System'. Are you missing an assembly reference?点击【项目】---------->点击【添加引用(R)】--------------->选择需要的程序集即可。今天搞了一下午终于解决问题了。如上面这样就添加了引用了。找了好久终于到刚刚才找到。

qq_35644537的博客 481

unity用-System.Windows.Forms.rar

unity用System.Windows.Forms.dll,可使用windows原生MessageBox

Unity3D使用System.Windows.Forms.dll-附件资源

Unity3D使用System.Windows.Forms.dll-附件资源

Unity调用Windows原生文件对话框:三步实现与线程安全实践

在Unity开发中,与本地文件系统交互是工具链、编辑器扩展和数据导入导出的常见需求。传统方案如手动输入路径或使用Web请求体验较差,而直接调用Windows API又过于复杂。通过.NET Framework的System.Windows.Forms命名空间,开发者可以高效调用原生文件对话框,提升应用的专业性和用户体验。这一方案的核心在于处理好平台兼容性与线程安全,确保对话框在主线程中模态化弹出,避免阻塞Unity的消息循环。对于需要用户自定义内容加载的项目,如游戏关卡编辑器或数据可视化工具,原生文件选择功

weixin_34099526的博客 322

「Unity3D」Addressable版本冲突解析:SBP与Addressables兼容性问题实战指南

本文深入解析Unity3D中Addressable与SBP(Scriptable Build Pipeline)版本冲突问题,提供实战解决方案。当遇到「Build Task CreateBuiltInShadersBundle failed」错误时,可通过版本匹配、临时资源引用或构建参数调整解决。文章详细分析兼容性原理,并给出版本组合指南与最佳实践,帮助开发者高效处理资源构建问题。

weixin_29001683的博客 409

使用Unity实现打开Windows.Forms窗口将选择的视频或图片上传到服务器,之后下载播放视频。 Unity2018引用System.Windows.Forms.dll发布报错

使用Unity实现打开Windows.Forms窗口将选择的视频或图片上传到服务器,之后下载播放视频。 Unity2018引用System.Windows.Forms.dll发布报错 1 unity 端代码 拷贝窗口 dl 文件 System.Windows.Forms.dll 来自于unity 安装路径下的 : Editor\Data\Mono\lib\mono\2.0, 拷贝到plugins 文件下 打开Windows.Forms 窗口,选中后将图...

july_unity的博客 1962

5V转±12V无变压器双boost电路

最近有个新项目,需要±10V范围的模拟量输出(非隔离),对于5V以下供电的控制板而言单端输出绝对没问题,可现在需要有正负输出,是少不了正负电源的,因此准备设计一个5V转±12V的电源,然后选择一个双向供电的运放,来实现单端模拟量信号向双向模拟量信号转换。 本文就来分享一下5V转±12V电源的设计。对于有类似双向电源需求的场合,大多使用变压器通过增加多个绕组来实现,而对于体积空间有要求的场合来讲,变压器实在是太大了,另外对于一些成熟的项目,变压器如果是已经设计好的,再额外增加绕组需要重新设计,费时费力。于是,

qq_30388337的博客 1万+

如何编译RustDesk(Unbuntu 和Android版本)

备注:官方文档上,一边都是基于sciter,这个在后面已经不建议使用了,但是依然可以编译刚开始的时候看官方的文档,涉及的东西比较多,也搞的一头雾水,通过B站上一个视频,可以通过CI/CD来编译,以及act本地试试(最终放弃,大概需要下载大几十G的容器下来)。最终总算明确了方向,可以用自动化流水线来编译。直接看CI/CD的脚本文件文件在.github/workflows目录下,重点研究 bridge.yml 和flutter-build.yml 这两个文件。

lvronglee的专栏 2547

Unity 本地获取图片文件,显示在面板上

根据自己的Unity的.Net版本在Unity中选择合适的配置文件:System.Drawing.dll;System,Windows.Forms.dll 文件路径:D:\Unity2019.3.0\Editor\Data\MonoBleedingEdge\lib\mono 先定义文件属性: using System; using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, CharSet = CharSet.

studentye的博客 969

静态时序分析(Static Timing Analysis, STA):简介及内容导航

静态时序分析(简称STA)是用来验证数字设计时序的技术之一,另外一种验证时序的方法是时序仿真,时序仿真可以同时验证功能和时序。“时序分析”这个术语就是用来指代“静态时序分析“或”时序仿真“这两种方法之一,简单来说,时序分析的目的就是为了解决设计中的各种时序问题。STA被称为静态的原因是其对于设计的分析是静态地执行的,并不依赖于施加在输入端口上的激励。相比之下,时序仿真则可以被视作动态地执行对设计的分析,具体过程描述如下:施加一组激励,观察在这组激励下电路行为是否符合要求,然后换一组激。

Starry__的博客 1986
上一篇: Unity中读取、写入文件
下一篇: Unity中运用EventSystem
hypercube2
博客等级 码龄18年 23粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值