HoloLens2读取本地文件

文件读取

    在由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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值