0
点赞
收藏
分享

微信扫一扫

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据

一世独秀 2022-10-18 阅读 151
  • ​​GitHub开源地址​​
  • ​​Unity3D插件分享​​
  • ​​简书地址​​
  • ​​我的个人博客​​
  • ​​QQ群:1040082875​​

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

一、前言

有粉丝问我,怎么在打包后WEBGL读取本地文件数据呢?

我一想,这不是很简单的嘛,直接刷刷几行代码的事:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;

public class LoadFile : MonoBehaviour
{
void Start()
{
string path = Application.streamingAssetsPath + "/TextRead.txt";
//文件流形式读取文档
using (FileStream fs = File.OpenRead(path))
{
byte[] bytes = new byte[fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
string str = Encoding.UTF8.GetString(bytes);
Debug.Log(str);
}
}
}

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据_webgl


【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据_加载_02


运行后也没有问题:

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据_加载_03


然后打包WEBGL:

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据_webgl_04


报错:无法找到路径,其实不是路径的问题,而是WEBGL不支持IO

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据_加载_05


接下来,就来说一下WEBGL读取本地文件的方法吧。

二、解决方案

2-1、使用Resources.Load加载文件

将要读取的文件放到Resources文件夹下:

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据_unity_06


代码:

using UnityEngine;

public class LoadFile : MonoBehaviour
{
void Start()
{
TextAsset data = Resources.Load("TextRead") as TextAsset;
Debug.Log(data);
}
}

运行结果:

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据_webgl_07


注意:这种方式只能读取文本文件,比如txt、XML、Json,特殊文本文件csv也可以读取。

Excel文件不支持。

2-2、使用UnityWebRequest加载文件

还有一种方案是使用UnityWebRequest去加载本地文件,代码参考如下:

using System.Collections;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;

public class LoadFile : MonoBehaviour
{
void Start()
{
StartCoroutine(ReadData());
}

IEnumerator ReadData()
{
string path = Path.Combine(Application.streamingAssetsPath, "TextRead.txt");
Debug.Log(path);
UnityWebRequest request = UnityWebRequest.Get(path);
yield return request.SendWebRequest();
if (request.isNetworkError || request.isHttpError)
{
Debug.Log(request.error);
}
else
{
Debug.Log(request.downloadHandler.text);
}
}
}

运行结果:

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据_unity_08


打包WEBGL后也运行正常:

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据_unity_09

三、后记

下面讨论一下如何加载更多格式的文件。

因为这种方式只能加载特定格式,比如​​txt、XML、Json,csv​​​,那​​视频跟图片​​​以及​​特殊格式​​该怎么加载呢?

3-1、加载图片资源

以图片jpg格式为例:

using System.Collections;
using System.IO;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.UI;

public class LoadFile : MonoBehaviour
{
public Image img;
void Start()
{
StartCoroutine(ReadTexture(LoadImg));
}

void LoadImg(Texture texture)
{
Sprite ImgSprite =Sprite.Create((Texture2D)texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
img.sprite = ImgSprite;
}

IEnumerator ReadTexture(UnityAction<Texture> action)
{
string path= Path.Combine(Application.streamingAssetsPath, "1.jpg");
Debug.Log(path);
UnityWebRequest request = UnityWebRequestTexture.GetTexture(path);
yield return request.SendWebRequest();
if (request.isNetworkError || request.isHttpError)
{
Debug.Log(request.error);
}
else
{
byte[] imgdata = request.downloadHandler.data;

action(DownloadHandlerTexture.GetContent(request));
}
}
}

在SteamingAssets文件中放一种图片:

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据_加载_10


新建一个Image:

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据_webgl_11


将Image拖入卡槽中:

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据_加载_12


运行结果:

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据_c#_13

3-2、加载多媒体资源

其实代码都大同小异,参考如下:

using System.Collections;
using System.IO;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.UI;

public class LoadFile : MonoBehaviour
{
public AudioSource AudioSource;

void Start()
{
StartCoroutine(LoadMultimedia(LoadAuido));
}

//加载多媒体
IEnumerator LoadMultimedia(UnityAction<AudioClip> action)
{
string path = Path.Combine(Application.streamingAssetsPath, "1.wav");
Debug.Log(path);
UnityWebRequest request = UnityWebRequestMultimedia.GetAudioClip(path,AudioType.WAV);
yield return request.SendWebRequest();
if (request.isNetworkError || request.isHttpError)
{
Debug.Log(request.error);
}
else
{
action(DownloadHandlerAudioClip.GetContent(request));
}
}

void LoadAuido(AudioClip audioClip)
{
AudioSource.clip = audioClip;
AudioSource.Play();
}
}

运行结果:

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据_c#_14


可以听到声音,没有问题。

3-2、加载其他格式资源

没有办法。。。

你的点赞就是对博主的支持,有问题记得留言:

博主主页有联系方式。

博主还有跟多宝藏文章等待你的发掘哦


举报

相关推荐

Unity3D

0 条评论