Unity读取TXT文本文件

  • 读取
  • 解析

读取

Unity的文本读取,可以分成四种方式:

  1. 使用TextAsset类。
    在程序脚本中,以字段public TextAsset text;的形式,直接在Inspector面板中拖动赋值。在之后的程序中,使用text.text;就可以获得文本中的内容。

  2. 使用Resources.Load加载方式。
    Resources.Load我们通常是用于预制体(GameObject)的加载,但其实Resources.Load可以加在很多种类的资源,只要是在Resources文件夹下,然后找到资源相对应的类,就可以了。对于文本文件,使用的就是上面提到的 TextAsset类。
    用法示例:TextAsset textAsset = Resources.Load(...) as TextAsset;,其中参数填的依然是Resources文件夹下的相对路径。

    另外,Resources.Load加载其他资源分别用的是:图片可以使用SpriteTexture2D(我只试过这两种);音频是使用AudioClip
    同时,除GameObject外,其他文件没有发现需要进行**实例化(Object.Instantiate)**的操作。
    大家如发现,有其他的可以加载的文件、其对应的类或某些特殊情况,可以留言探讨。

  3. 使用WWW或者UnityWebRequest加载方式。
    WWW类是Unity自己封装的一个可以加载外部资源或网络资源的类。而在最新版的Untiy中UnityWebRequest系列的类取代了WWW类的作用。这里只简单介绍UnityWebRequest类加载文本文件的方式。代码如下:

public IEnumerator Load(string path)
{UnityWebRequest m_request = UnityWebRequest.Get(path);yield return m_request.SendWebRequest();string result = m_request.downloadHandler.text;
}

一般这样使用就可以。但为保安全,一般我都会使用下方的代码:

public IEnumerator Load(string path)
{UnityWebRequest m_request = UnityWebRequest.Get(path);yield return m_request.SendWebRequest();while (!m_request.isDone){yield return null;}if (m_request.isNetworkError){Debug.LogError(m_request.error);yield break;}string result = m_request.downloadHandler.text;
}
  1. 使用StreamReader类读取。
    StreamReader类是System.IO库中的类,比较通用,所以比较上面的几种方法,更加实用。
public void ReadData(string path)
{FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None);StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);if (null == sr) return;string str = sr.ReadToEnd();sr.Close();
}

上面只是一种创建使用StreamReader类的方式,还有很多方式可以使用,例如StreamReader sr = File.OpenText();等。在StreamReader类中获取分本内容的方式除了上面例子中使用的,还有使用ReadLine函数按行进行读取,例如while ((line = sr.ReadLine()) != null)或者for (int i = 0; (str = sr.ReadLine()) != null; i++)等,其他的函数还有按照块进行读取(ReadBlock),能力有限暂时并未使用过,如果有大神知道的希望可以指点一下。

解析

文本文件的解析是不确定的,因为除了比较常用的JSONXML等格式(这些可以直接使用现成的工具或库进行解析)以外,不同的人或项目所使用的格式都不会确定。这里我就举一个例子,是我项目中遇到的,一个文本文件(txt)其中的内容并不是某个特定的格式,但也比较简单,数据都是由空格(' ')和换行('\n')隔开的。
文本内容示例:

frame_0 0.0180 0.0180 0.0011 0.0008 0.0008 0.0000 0.0000 0.0000 0.0022 0.0022 0.0000 0.0000 0.0000 0.0556 0.0556 0.0000 0.0238 0.0238 0.0058 0.0058 0.0000 0.0000 0.0000 0.0000 0.0755 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1066 0.0000 0.0000 0.0000 0.0000 0.0000 0.1242 0.0000 0.0053 0.0046 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1482 0.1482 0.0234 0.0234
frame_1 0.0083 0.0083 0.0011 0.0008 0.0008 0.0000 0.0000 0.0000 0.0114 0.0114 0.0000 0.0000 0.0000 0.0426 0.0426 0.0000 0.0117 0.0117 0.0177 0.0177 0.0000 0.0000 0.0000 0.0000 0.1490 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0010 0.0000 0.0000 0.0000 0.0000 0.0000 0.1048 0.0000 0.0053 0.0046 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2342 0.2342 0.0123 0.0123
frame_2 0.0159 0.0159 0.0018 0.0013 0.0013 0.0000 0.0000 0.0000 0.0088 0.0088 0.0149 0.0149 0.0773 0.0277 0.0277 0.0773 0.0112 0.0112 0.0106 0.0106 0.0000 0.0000 0.0000 0.0000 0.1696 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0162 0.0000 0.0025 0.0025 0.0000 0.0000 0.0396 0.0000 0.0053 0.0046 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2162 0.2162 0.0521 0.0521
frame_3 0.0110 0.0110 0.0022 0.0015 0.0015 0.0000 0.0000 0.0000 0.0074 0.0074 0.0287 0.0287 0.1421 0.0136 0.0136 0.1421 0.0053 0.0053 0.0082 0.0082 0.0000 0.0000 0.0000 0.0000 0.1792 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0002 0.0000 0.0067 0.0067 0.0000 0.0000 0.0157 0.0000 0.0053 0.0046 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2124 0.2124 0.0336 0.0336
frame_4 0.0077 0.0077 0.0017 0.0012 0.0012 0.0000 0.0000 0.0000 0.0055 0.0055 0.0311 0.0311 0.1515 0.0054 0.0054 0.1515 0.0053 0.0053 0.0056 0.0056 0.0000 0.0000 0.0000 0.0000 0.1729 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0206 0.0206 0.0000 0.0000 0.0000 0.0000 0.0111 0.0104 0.0000 0.0000 0.0257 0.0257 0.0000 0.0000 0.1866 0.1866 0.0284 0.0284

下面是我程序中的解析函数:

protected Queue<float[]> Parsing(string original)
{Queue<float[]> frames = new Queue<float[]>();string[] arr = original.Split('\n');for (int i = 0; i < arr.Length; i++){string[] temp = arr[i].Split(' ');float[] frame = new float[temp.Length - 1];for (int j = 1; j < temp.Length; j++){try{frame[j - 1] = float.Parse(temp[j]);}catch{Debug.LogError("读取数据:" + temp[j] + "转换“float”失败!");continue;}}frames.Enqueue(frame);}return frames;
}

Unity读取TXT文本文件相关推荐

  1. A.PHP读取txt文本文件并分页显示的方法

    PHP读取txt文本文件并分页显示的方法 作者:TomRobert 字体:[增加 减小] 类型:转载 时间:2015-03-11 我要评论 这篇文章主要介绍了PHP读取txt文本文件并分页显示的方法, ...

  2. JavaScript之读取txt文本文件内容

    读取txt文本文件内容. 代码: <!DOCTYPE html> <html lang="en"><head><title>文件读取 ...

  3. vba打开txt文件_VBA基础入门(34)读取txt文本文件

    对于这样的txt文本文件,我们怎么一行一行去读取数据呢? #00001 65536 *00001 65536 说说常用的两种方法,一种是把txt文本文档读到Excel中,然后获取最大行数,做个循环来遍 ...

  4. C#简单实现读取txt文本文件并分页存储到数组

    最近做一个VR项目,需要把某个中草药的介绍信息分页显示到unity场景里然后用VR手柄切换信息. unity的脚本是c#,就先在本地写了个代码测试了一下,利用控制台测试输出,到时候拷贝函数过去再结合交 ...

  5. Python 读取txt文本文件

    Python的文本文件的内容读取中,有三类方法:read().readline().readlines(),这三种方法各有利弊. read(): read()是最简单的一种方法,一次性读取文件的所有内 ...

  6. C++文件操作——按行读取txt文本文件

    我们经常在一些项目中需要处理文本文件的读取,比如按行进行文本读取操作 下面分别介绍按行读取文本的一些方法: (1).采用C语言中的fgets函数 USES_CONVERSION; //调用函数,T2A ...

  7. Qt写入读取txt文本文件

    打开文件时,使用参数选择打开文件模式 模式 值 描述 QIODevice::NotOpen 0x0000 不打开 QIODevice::ReadOnly 0x0001 只读方式 QIODevice:: ...

  8. python中读取txt文本文件为类似excel表格的形式(包括用空格分割的文件)

    在一些txt文件中,数据以类似表格的形式存在,如下图: 在处理这些数据的时候,我们想把它读取为类似与表格的行和列组成的文件.但是普通的txt文件读取操作readline() 和readlines()等 ...

  9. unity 实现文本选中_Unity中如何读取TXT文本内容

    在游戏开发过程中,我们是离不开需求的,而需求的事情是由策划来做的,那么我们和策划也是需要沟通交流的,那么是怎么交流的呢?策划不需要写代码,只需要思考一些游戏的内容,数据,玩法的实现,然后让我们按照策划 ...

  10. unity3D读取Txt文件中信息

    unity读取txt文件 方法1: 1 using UnityEngine; 2 using System.Collections; 3 using UnityEngine.UI; 4 public ...

最新文章

  1. 32-bit到64-bit 开发及升级经验
  2. mongodb带认证的副本集搭建
  3. Hadoop开发工具简介
  4. cm如何查看各个组件版本_Oracle HowTo:查询Oracle各组件的版本信息
  5. 在jquery的ajax方法中的success中使用return要注意的问题
  6. springmvc07 Json处理
  7. Teradata中的四舍五入问题
  8. python 开源项目大全
  9. 古代汉语复习资料与练习题(适合王力版教材)
  10. python求角度公式_Python 计算任意两向量之间的夹角方法
  11. 非门芯片 74AHC1G08 74AHC1G04 74AHC1G02的区别
  12. rv1126rv1109开发环境搭建
  13. python新手入门(四)
  14. 单细胞测序之scater包数据分析教程复现
  15. 移动端 H5 概念术语(一)
  16. 倾斜模型精细化处理_无人机倾斜摄影技术的三维精细模型制作
  17. java语言基础 : 初识计算机和Java语言-----java初识之路
  18. 移动端区分安卓系统和ios系统
  19. python表格处理实例_python列表格
  20. dnf超时空漩涡副本路线流程图_DNF:超时空旋涡攻略,如何快速通关副本?

热门文章

  1. Vulkan Nvidia 驱动 VK_ERROR_LAYER_NOT_PRESENT
  2. Python 好友管理系统【简单易懂,代码可以直接运行】
  3. 药品研发的项目化管理
  4. MathType7新版本数学公式编辑器上线功能特性
  5. 为什么四个字节的float表示的范围比八个字节的long要广
  6. 国内企业“数字化转型”案例!
  7. 产品经理-思维导图梳理功能
  8. VB6.0精简版调用matlab进行数值计算:
  9. CUDA+cuDNN下载安装(配备GPU环境)
  10. python 数据文件上传到ftp服务器