Unity发布成WebGL可以用chrome打开,之前有提到过。那么如何在WebGl中逐行读取本地的文本文件呢?
之前在网上有了解到可以利用WWW进行文件读取,发现读取后只能转换为string类型,我需要将其进行逐行处理,应该怎么办呢?经过一番搜寻,终于实现了文本文件的读取,核心代码如下:
using UnityEngine;
using System.Collections;
public class OpenFile : MonoBehaviour
{
void Start()
{
StartCoroutine(OpenDataFile());//开启协程运行函数
}
private IEnumerator OpenDataFile()
{
var www = new WWW(@"file://D://DataFile.LAS");//注意这句的格式,我在这里打开了D盘根目录下的DataFile.LAS文件,其他文本文件也可以打开
yield return www;
string str;
string strAll = System.Text.Encoding.UTF8.GetString(www.bytes);//注意这一句,以UTF8格式按byte读取文本文件,存入string
//上一语句应该也可以用右边语句替代:string strAll = www.text;
string[] sr = strAll.Split(new string[] { "\r\n" }, System.StringSplitOptions.None);//将string根据回车换行符进行分割,得到字符串数组,即按行存放
//接下来根据需要对sr字符串数组进行想要的操作
}
}
本质上上述方法是将文本文件读入形成一个超长字符串,然后再将字符串按行进行分割。所以如果文本文件太大,内存应该会吃不消。我之前希望利用stream流的方法获取文本文件,但是不知道WWW类型数据如何转化为stream流(目前可以转化为单个stream),如果有更好的方法,欢迎各位告知。
上述方法应该可以在webgl中得到文本数据,目前我在chrome中测试可用。如果文本文件过大的话需要在Unity编辑器中的File->Build Settings中选择WebGL,并在Player Settings->Publishing Settings中将WebGL Memory Size设置更大。