• Unity中常用的几种读取本地文件方式


    使用的命名空间如下

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

    1、通过UnityWebRequest获取本地StreamingAssets文件夹中的Json文件

          /// <summary>
        /// 通过UnityWebRequest获取本地StreamingAssets文件夹中的Json文件
        /// </summary>
        /// <param name="fileName">文件名称</param>
        /// <returns></returns>
        public string UnityWebRequestJsonString(string fileName)
        {
            string url;
    
            #region 分平台判断 StreamingAssets 路径
            //如果在编译器 或者 单机中  ……
    #if UNITY_EDITOR || UNITY_STANDALONE
    
            url = "file://" + Application.dataPath + "/StreamingAssets/" + fileName;
            //否则如果在Iphone下……
    #elif UNITY_IPHONE
    
                url = "file://" + Application.dataPath + "/Raw/"+ fileName;
                //否则如果在android下……
    #elif UNITY_ANDROID
                url = "jar:file://" + Application.dataPath + "!/assets/"+ fileName;
    #endif
            #endregion
            UnityWebRequest request = UnityWebRequest.Get(url);
            request.SendWebRequest();//读取数据
            while (true)
            {
                if (request.downloadHandler.isDone)//是否读取完数据
                {
                    return request.downloadHandler.text;
                }
            }
        }
    ```
    View Code

    2、通过UnityWebRequest和StreamReader读取本地StreamingAssets文件夹中的Json文件

          /// <summary>
        /// 通过UnityWebRequest获取本地StreamingAssets文件夹中的Json文件
        /// </summary>
        /// <param name="fileName">文件名称</param>
        /// <returns></returns>
        public string UnityWebRequestJsonString(string fileName)
        {
            string url;
    
            #region 分平台判断 StreamingAssets 路径
            //如果在编译器 或者 单机中  ……
    #if UNITY_EDITOR || UNITY_STANDALONE
    
            url = "file://" + Application.dataPath + "/StreamingAssets/" + fileName;
            //否则如果在Iphone下……
    #elif UNITY_IPHONE
    
                url = "file://" + Application.dataPath + "/Raw/"+ fileName;
                //否则如果在android下……
    #elif UNITY_ANDROID
                url = "jar:file://" + Application.dataPath + "!/assets/"+ fileName;
    #endif
            #endregion
            UnityWebRequest request = UnityWebRequest.Get(url);
            request.SendWebRequest();//读取数据
            while (true)
            {
                if (request.downloadHandler.isDone)//是否读取完数据
                {
                    return request.downloadHandler.text;
                }
            }
        }
    ```
    View Code

     3、通过StreamReader读取本地StreamingAssets文件夹中的Json文件 

          /// <summary>
        /// 通过UnityWebRequest获取本地StreamingAssets文件夹中的Json文件
        /// </summary>
        /// <param name="fileName">文件名称</param>
        /// <returns></returns>
        public string UnityWebRequestJsonString(string fileName)
        {
            string url;
    
            #region 分平台判断 StreamingAssets 路径
            //如果在编译器 或者 单机中  ……
    #if UNITY_EDITOR || UNITY_STANDALONE
    
            url = "file://" + Application.dataPath + "/StreamingAssets/" + fileName;
            //否则如果在Iphone下……
    #elif UNITY_IPHONE
    
                url = "file://" + Application.dataPath + "/Raw/"+ fileName;
                //否则如果在android下……
    #elif UNITY_ANDROID
                url = "jar:file://" + Application.dataPath + "!/assets/"+ fileName;
    #endif
            #endregion
            UnityWebRequest request = UnityWebRequest.Get(url);
            request.SendWebRequest();//读取数据
            while (true)
            {
                if (request.downloadHandler.isDone)//是否读取完数据
                {
                    return request.downloadHandler.text;
                }
            }
        }
    ```
    View Code

     4、通过FileStream读取本地StreamingAssets文件夹中的文件

        /// <summary>
        /// 通过FileStream读取本地StreamingAssets文件夹中的文件
        /// </summary>
        /// <param name="jsonName"></param>
        /// <returns></returns>
        public string GetAllFileInfos(string jsonName)
        {
            string jsonPath = Application.streamingAssetsPath + "/" + jsonName;
            try
            {
                using (FileStream fs = new FileStream(jsonPath, FileMode.Open, FileAccess.Read))
                {
                    fs.Seek(0, SeekOrigin.Begin);
                    var bytes = new byte[fs.Length];
                    fs.Read(bytes, 0, (int)fs.Length);
                    string jsonData = Encoding.UTF8.GetString(bytes);
                    fs.Flush();
                    fs.Dispose();
                    fs.Close();
                    return jsonData;
                }
                //Debug.Log("所有文件资源信息Assets下文件夹数量:" + fileInfos.Count);
            }
            catch (Exception e)
            {
                Debug.LogError(e.Message);
                Debug.LogError("文件读取异常:" + jsonPath);
                return string.Empty;
            }
        }
    View Code

    参考资源:https://www.cnblogs.com/unity3ds/p/11742487.html](https://www.cnblogs.com/unity3ds/p/11742487.html

    转载链接:https://blog.csdn.net/U3DCoder/article/details/115464140

  • 相关阅读:
    NoSQL数据库:Redis内存使用优化与存储
    http缓存与cdn相关技术
    sphinx 全文索引
    Elasticsearch7.1中文文档-第一章-入门
    创建一个新的laravel
    mysql数据库的主从同步,实现读写分离
    使用 Swoole 来加速你的 Laravel 应用
    Linux下全局安装composer方法
    Laravel 加载第三方类库的方法
    jquery里把数组转换成json的方法
  • 原文地址:https://www.cnblogs.com/Study088/p/14789679.html
Copyright © 2020-2023  润新知