博主今天想做一个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();
}

更多推荐