unity WebGL加载本地文件(图片)
·
博主今天想做一个WebGL读取本地磁盘中文件加载到程序中的功能,本来想着不太难操作的一个功能,搜来搜去也没有一个好使的(要不就是vip文章,李奈奈滴),于是乎博主借用包哥的力量搞了个加载本地图片的功能,如果需要加载别的文件大家就自己修改下吧,道理和pc端应该是一样的,废话说完了直接放代码!
a596361246/WebGLLoadImage: webgl调用windows文件夹窗口加载本地图片
这里记得需要修改下index文件,版本不同可能有所差异,这里js代码博主不太懂,大概意思就是WebGLFileLoader.jslib中无法读取到unityInstance实例,所以我们要在这里给它公开出来并赋值。

还有一点要注意的是


这里unity端接收js消息的实例一定要对应上。
这里代码的主要功能就是接收js发送来的文件进行一个解析
using UnityEngine;
using UnityEngine.UI;
using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;
public class WebGLImageLoader : MonoBehaviour
{
[Header("用于显示加载的图片")]
public RawImage rawImage; // 在Inspector中绑定UI RawImage
public Button openBtn;
private void Start()
{
openBtn.onClick.AddListener(OpenFileSelector);
}
// 供JS调用的方法(必须是public void,参数为string)
public void OnImageLoadedFromBase64(string base64Data)
{
if (string.IsNullOrEmpty(base64Data))
{
Debug.LogError("获取的Base64图片数据为空");
return;
}
try
{
// 1. 剥离Base64头部信息(data:image/png;base64,)
string base64Pure = base64Data.Split(',')[1];
// 2. 将Base64字符串转换为字节数组
byte[] imageBytes = Convert.FromBase64String(base64Pure);
// 3. 从字节数组创建Texture2D
Texture2D texture = new Texture2D(2, 2); // 初始尺寸会自动适配图片
texture.LoadImage(imageBytes); // 关键方法:自动解析图片格式并设置纹理尺寸
// 4. 将纹理赋值给RawImage显示
rawImage.texture = texture;
rawImage.SetNativeSize(); // 适配图片原始尺寸
}
catch (Exception e)
{
Debug.LogError("解析图片失败:" + e.Message);
}
}
// 触发文件选择的方法(可绑定到UI按钮点击事件)
public void OpenFileSelector()
{
#if UNITY_WEBGL && !UNITY_EDITOR
// 调用JSlib中的CreateFileSelector方法
CreateFileSelector();
#else
Debug.Log("该功能仅在WebGL打包后生效");
#endif
}
// 必须声明JSlib中的方法(供Unity调用)
[DllImport("__Internal")]
private static extern void CreateFileSelector();
}
更多推荐


所有评论(0)