⭐Unity 里调用弹出电脑系统文件选择窗 (选择图片/文件)

今天遇到的需求要从Uinty里调用选择程序外的图片,类似手机环境下拿图库的照片一样。

效果如下:

话不多说 直接上代码!

1.编辑器模式下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Runtime.InteropServices;
//using System.Windows.Input;
//using System.Windows.Forms;
using System;
using UnityEngine.UI;public class TestImage : MonoBehaviour
{public RawImage rawImage;// 引用一个Unity的Texture2D来显示加载的图片public Texture2D texture;// 在Unity中点击按钮调用此方法public void LoadImage(){// 打开文件对话框并等待用户选择文件string filePath = UnityEditor.EditorUtility.OpenFilePanel("Select PNG", "", "png");// 检查用户是否选择了文件if (!string.IsNullOrEmpty(filePath)){try{ImageProcessor._instance.inputImagePath = filePath;// 读取PNG文件为字节数组byte[] fileData = File.ReadAllBytes(filePath);// 创建一个新的Texture2Dtexture = new Texture2D(2, 2);// 加载PNG文件数据到Texture2Dtexture.LoadImage(fileData);// 将加载的图片显示在RawImage对象上rawImage.texture = texture;}catch (System.Exception ex){// 处理异常情况Debug.LogError("Error loading image: " + ex.Message);}}}
}

2.打包后运行模式下

由于 UnityEditor.EditorUtility.OpenFilePanel 只支持在编辑器模式下,打包会报错。

所以这边需要使用跨平台的第三方库,如StandaloneFileBrowser,这是一个可以在游戏运行时使用的开源库,支持Windows、Mac和Linux平台的文件选择对话框。

链接如下:

Unity 独立文件浏览器 Github地址

下载之后导入Unity就可以啦~~~

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.UI;
// 引入StandaloneFileBrowser
using SFB;public class TestImage : MonoBehaviour
{public RawImage rawImage;// 引用一个Unity的Texture2D来显示加载的图片public Texture2D texture;// 在Unity中点击按钮调用此方法public void LoadImage(){// 使用StandaloneFileBrowser打开文件对话框string[] paths = StandaloneFileBrowser.OpenFilePanel("Select PNG", "", "png", false);if (paths.Length > 0){string filePath = paths[0];if (!string.IsNullOrEmpty(filePath)){try{// 读取PNG文件为字节数组byte[] fileData = File.ReadAllBytes(filePath);// 创建一个新的Texture2Dtexture = new Texture2D(2, 2);// 加载PNG文件数据到Texture2Dtexture.LoadImage(fileData);// 将加载的图片显示在RawImage对象上rawImage.texture = texture;}catch (System.Exception ex){// 处理异常情况Debug.LogError("Error loading image: " + ex.Message);}}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/611073.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio开发学习(七)———RelativeLayout(相对布局)

在上期中我们对LinearLayout进行了详细的解析,LinearLayout也是我们用的比较多的一个布局,更多的时候更钟情于它的 weight(权重) 属性,等比例划分,对屏幕适配还是 帮助蛮大的;但是使用LinearLayout的时候也有一个问题,就是当界面比…

软考高级架构师:数据库模式概念和例题

一、AI 讲解 数据库模式分为三个层次:外模式、概念模式和内模式。这三个层次分别对应不同的抽象级别,帮助数据库管理员和用户以不同的视角理解数据库结构。 外模式(用户级):是数据库用户的视图。每个用户可以通过外模…

Banana Pi BPI-M7 RK3588开发板运行RKLLM软件堆AI大模型部署

关于Banana Pi BPI-M7 Banana Pi BPI-M7 采用Rockchip RK3588,板载8/16/32G RAM内存和 64/128G eMMC存储,支持无线wifi6和蓝牙5.2。2x2.5G网络端口,1个HDMIout标准 输出口,2x USB3.0,2xTYPE-C,2x MIPI CSI…

DAY03|203.移除链表元素、707.设计链表、206.反转链表

203.移除链表元素、707.设计链表、206.反转链表 LeetCode 203.移除链表元素LeetCode 707.设计链表LeetCode 206.反转链表双指针法递归法 LeetCode 203.移除链表元素 注意,在dummy上操作,返回也返回dummy->next 如果头铁想返回head,那样会…

SOLIDOWRKS怎么将中间格式的模具装配体转化为装配体格式

模具是工业生产中用于制作成型物品的工具,它由各种零件构成,可以通过改变所成型材料的物理状态来实现物品外形的加工。如果工程师已经有其他格式的模具装配体,但是又想将其他格式的模具装配体导入solidworks里面,并且将一个个实体…

单链表总结提升

这篇博客讲解数据结构中的单链表,包括单链表的基础知识和我对链表实现的总结理解,希望可以帮助到正在学习的小伙伴,也希望得到小伙伴们的关注和支持哦~ 目录 1.单链表的概念 1.2顺序表和链表的对比 顺序表: 链表:…

从 Oracle 到 MySQL 数据库的迁移之旅

文章目录 引言一、前期准备工作1.搭建新的MySQL数据库2 .建立相应的数据表2.1 数据库兼容性分析2.1.1 字段类型兼容性分析2.1.2 函数兼容性分析2.1.3 是否使用存储过程?存储过程的个数?复杂度?2.1.4 是否使用触发器?个数&#xff…

Java中实现监听UDP协议的指定端口并收到数据按照十六进制输出

场景 对接协议中需要监听UDP协议的指定端口并监听数据,且数据格式为十六进制。 如果是在linux服务上,可以快速通过C或者python脚本等方式实现。 这里使用Java代码实现,可便于后续做其他存储数据等的扩展,且只需要在服务器上安装…

FPGA基于VCU的H265视频压缩,HDMI2.0输入,支持4K60帧,提供工程源码+开发板+技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的视频图像编解码方案 3、详细设计方案设计框图FPGA开发板视频输入Video PHY ControllerHDMI 1.4/2.0 Receiver SubsystemVideo Processing SubsystemVideo Frame Buffer WriteZynq UltraScale VCUPetaLinux 系统制作VLC播放器工…

C++ stl容器string的底层模拟实现

目录 前言: 1.成员变量 2.构造函数与拷贝构造函数 3.析构函数 4.赋值重载 5.[]重载 6.比较关系重载 7.reserve 8.resize 9.push_back,append和重载 10.insert 11.erase 12.find 14.迭代器 15.流插入,流提取重载 16.swap 17.c_str 18.完…

Docker 安装 RocketMQ

目录 一、新建两个配置文件 1.1 创建docker-compose.yml文件 1.2 .新建broker.conf文件 二、运行 三、可视化界面 一、新建两个配置文件 1.1 创建docker-compose.yml文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports…

css引入方式(样式表)

样式表 我们网页是html代码的,我们是需要一种方式把我们的css代码放入到html代码中,那么这个就是css的引入方式又叫做样式表。 css样式表 1.内部样式表 2.行内样式表 3.外部样式表 内部样式表(又称嵌入式引入) 本样式表是指…