文件读取
在由Unity生成的Visual Studio (Universal Windows) 项目中,将需要读取的XML文件或text文件放在目录…\Assets下,或者创建一个子文件夹来存放所需读取的文件。如下图,我将所需读取的文件放在了…\Assets\StreamingAssets下
在Script顶部添加如下声明:
#if WINDOWS_UWP
using Windows.Storage;
using System.Threading.Tasks;
using Windows.Data.Xml.Dom;
using System;
#endif
然后根据Uri的路径来读取文件:
string xmlText;
#if WINDOWS_UWP
Task task = new Task(
async () =>
{
var xmlFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Data/StreamingAssets/Test.xml"));
XmlDocument xdoc = await XmlDocument.LoadFromFileAsync(xmlFile);
xmlText = xdoc.GetXml();
});
task.Start();
task.Wait();
#endif
该例子中的Test.xml文件放在了Assests文件夹下的StreamingAssets子文件夹下(为什么 在文件路径中多出了Data文件夹,在打包生成VS项目的那一步中会解释)。
同样的也可以读取text文件:
string plainText;
public Text txtTextMesh.text;
#if WINDOWS_UWP
Task task = new Task(
async () =>
{
StorageFile textFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Data/Text.txt"));
plainText = await FileIO.ReadTextAsync(textFile);
txtTextMesh.text = plainText;
});
task.Start();
task.Wait();
#endif
该例子中的Text.txt文件是位于Assests下的,txtTextMesh是Text类型,将读取到的内容显示在场景中绑定的Text上(为什么 在文件路径中多出了Data文件夹,在打包生成VS项目的那一步中会解释)。
打包生成VS项目
将工程在Unity打包成VS文件后,之前的文件或者子文件夹会被打包到工程下的Data文件夹下:
打开生成的VS项目,设置属性如下,代表着在部署项目的时候这些文件会跟随项目一起打包生成:
在Relative Path路径中可以看到其路径为:Data\StreamingAssets\xxx,因此在之前声明Uri路径的时候需要加上Data文件夹。
至此HoloLens中文件读取完成。
完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.UI;
#if WINDOWS_UWP//UWP下编译
using Windows.Storage;
using System.Threading.Tasks;
using System;
#endif
public class UWP_ReadTest : MonoBehaviour
{
public Text ReadContentTest;
public Text AsyncContentTest;
// Start is called before the first frame update
void Start()
{
string list = "AsyncFail";
list = ReadFile() ;
AsyncContentTest.text = list;
}
string ReadFile( )
{
string s = "";
string text = "ReadFail";
#if WINDOWS_UWP
//async 关键字标注一个方法,该方法返回值是一个Task
Task task = new Task(
async () =>
{
StorageFile textFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Data/StreamingAssets/readTest.txt"));
text = await FileIO.ReadTextAsync(textFile);
ReadContentTest.text = text;
});
task.Start();
task.Wait();
#else
StreamReader r;
string path = (Application.streamingAssetsPath + "/" + "readTest.txt");
FileInfo fInfo = new FileInfo(path);
if (fInfo.Exists)
{
r = new StreamReader(path);
}
else
{
Debug.Log("文件不存在");
return null;
}
while ((s = r.ReadLine()) != null)
{
text = s;
}
ReadContentTest.text = text;
ReadContentTest.color = new Color(255, 0, 0);
#endif
return text;
}
// Update is called once per frame
void Update()
{
}
}
将脚本挂在场景中,创建一个UI->text
选择脚本中text对象对应的物体,运行时会将文件中的内容显示在场景中。
参考链接
How to deploy and read data file with app
Save a string to a text or cvs file on HoloLens