Unity_UWP---- Unity 工程发布win10 UWP 时的本地文件读取 Unity_UWP Unity 工程发布win10 UWP 时的本地文件读取

Unity_UWP Unity 工程发布win10 UWP 时的本地文件读取 

Universal Windows PlatformUWP)是微软Windows10专用的通用应用平台,其目的在于在统一操作系统下控制所有智能电子设备。

自从Unity 5.2之后,配合VS 2015和Windows 10 SDK就能够将Unity工程发布为UWP APP。可是这当中仍有数不清的雷区,比如文件读取。

上篇是UWP文件读取的铺垫,本篇是具体的Unity转UWP的文件读取

---------------------------

在Unity中: 

①Unity没有Windows.Storage命名空间,所以这绝对是个坑。

②Unity的C#版本只有4.0,不支持诞生于4.5的async/await异步机制,所以StorageFile 中的各种异步方法全部不能用。

虽说发布成UWP,但是在UWP下运行时,依然会受到Unity的诸多限制。


当然网上有方法在Unity中使用异步机制:http://blog.csdn.net/u013628121/article/details/52964063

但是我并没有成功,最终在这篇文章中得到了灵感,即采用非异步的方式:http://blog.csdn.net/u012741077/article/details/52167614

下面奉上我的最终代码:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System.IO;
  5. using System.Text;
  6. using System;
  7. #if NETFX_CORE //UWP下编译
  8. using Windows.Storage;
  9. #endif
  10. /// <summary>
  11. /// 数据控制类
  12. /// </summary>
  13. public class DataBase : MonoBehaviour
  14. {
  15. // Use this for initialization
  16. void Start()
  17. {
  18. ReadData();
  19. }
  20. // Update is called once per frame
  21. #if NETFX_CORE //UWP下
  22. private void ReadData()
  23. {
  24. StorageFolder docLib = KnownFolders.DocumentsLibrary;
  25. var docFile = docLib.OpenStreamForReadAsync( "Data\\data.bin");
  26. docFile.Wait();
  27. var fs = docFile.Result;
  28. //成功取出fs,后续操作自己玩
  29. fs.Dispose();
  30. }
  31. #else //Unity下
  32. private void ReadData()
  33. {
  34. string strDataPath = "C:\\Users\\YXY\\Documents\\Data\\data.bin";
  35. Stream fs = new FileStream(strDataPath, FileMode.Open, FileAccess.Read);
  36. //成功取出fs,后续操作自己玩
  37. fs.Dispose();
  38. }
  39. #endif
  40. }



这次的路径是:文档\Data\data.bin。对应传统路径:C:\Users\YXY\Documents\Data\data.bin。

上篇已经教过大家读取byte数据了,所以这里不再赘述,大家可以把byte转换成各种继续使用。

总而言之,只要不用异步方法取出流 fs,剩下的都好办了。

要点:

FileStream的初始化在UWP中因为读写权限问题无法实现,但是可以用其父类Stream进行曲线救国。

StreamUWP中没有close方法,只有Dispose方法,据说没有办法保存文件,所以本篇只读不写。


原文链接:https://blog.csdn.net/xxxhhhyxy/article/details/72871607

Universal Windows PlatformUWP)是微软Windows10专用的通用应用平台,其目的在于在统一操作系统下控制所有智能电子设备。

自从Unity 5.2之后,配合VS 2015和Windows 10 SDK就能够将Unity工程发布为UWP APP。可是这当中仍有数不清的雷区,比如文件读取。

上篇是UWP文件读取的铺垫,本篇是具体的Unity转UWP的文件读取

---------------------------

在Unity中: 

①Unity没有Windows.Storage命名空间,所以这绝对是个坑。

②Unity的C#版本只有4.0,不支持诞生于4.5的async/await异步机制,所以StorageFile 中的各种异步方法全部不能用。

虽说发布成UWP,但是在UWP下运行时,依然会受到Unity的诸多限制。


当然网上有方法在Unity中使用异步机制:http://blog.csdn.net/u013628121/article/details/52964063

但是我并没有成功,最终在这篇文章中得到了灵感,即采用非异步的方式:http://blog.csdn.net/u012741077/article/details/52167614

下面奉上我的最终代码:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System.IO;
  5. using System.Text;
  6. using System;
  7. #if NETFX_CORE //UWP下编译
  8. using Windows.Storage;
  9. #endif
  10. /// <summary>
  11. /// 数据控制类
  12. /// </summary>
  13. public class DataBase : MonoBehaviour
  14. {
  15. // Use this for initialization
  16. void Start()
  17. {
  18. ReadData();
  19. }
  20. // Update is called once per frame
  21. #if NETFX_CORE //UWP下
  22. private void ReadData()
  23. {
  24. StorageFolder docLib = KnownFolders.DocumentsLibrary;
  25. var docFile = docLib.OpenStreamForReadAsync( "Data\\data.bin");
  26. docFile.Wait();
  27. var fs = docFile.Result;
  28. //成功取出fs,后续操作自己玩
  29. fs.Dispose();
  30. }
  31. #else //Unity下
  32. private void ReadData()
  33. {
  34. string strDataPath = "C:\\Users\\YXY\\Documents\\Data\\data.bin";
  35. Stream fs = new FileStream(strDataPath, FileMode.Open, FileAccess.Read);
  36. //成功取出fs,后续操作自己玩
  37. fs.Dispose();
  38. }
  39. #endif
  40. }



这次的路径是:文档\Data\data.bin。对应传统路径:C:\Users\YXY\Documents\Data\data.bin。

上篇已经教过大家读取byte数据了,所以这里不再赘述,大家可以把byte转换成各种继续使用。

总而言之,只要不用异步方法取出流 fs,剩下的都好办了。

要点:

FileStream的初始化在UWP中因为读写权限问题无法实现,但是可以用其父类Stream进行曲线救国。

StreamUWP中没有close方法,只有Dispose方法,据说没有办法保存文件,所以本篇只读不写。


原文链接:https://blog.csdn.net/xxxhhhyxy/article/details/72871607

猜你喜欢

转载自blog.csdn.net/longtenggenssupreme/article/details/80886516
今日推荐