unity加载txt

开发游戏项目过程中,你会发现各式各样的配置表需要去读取解析供使用如商品、道具、活动、任务等等。一般情况下,一个游戏项目中尽量统一去使用一种格式的文件当配置表,本人当前所参与的项目中,以TXT文件当配置表为主。另外的特殊情况下,也会运用XML。本篇文章主要介绍Unity游戏项目中关于TXT、XML文件的读取解析。另外,也会简单介绍游戏中常用一些特殊的“数据格式”来配置表中特殊字段的特殊值如JSON格式,Bit位,时间戳,数组等。

1.TXT

根据TXT文件存储的位置与系统提供的的API的不同,大概有以下4种方式来读取解析。

(1)将存放于项目工程某一文件夹下的TXT文件直接拖到某一脚本的Inspector属性面板中赋值引用,该TXT变量类型为TextAsset。

/// 
/// txt文件
/// 
public TextAsset testTxtFile;
 
/// 
/// 读取TXT
/// 
 
private void ReadTxt()
{
    
    
    string content = testTxtFile.text;//获取到文本内容
    string[] allLines = content.Split('n');//根据换行符“划分”出多个“行文本”
 
  for (int i = 0; i < allLines.Length; i++)//读取解析所有行
  {
    
    
    //解析出一行中的各列
    string[] LineContent = allLines[i].Split(new string[]{
    
    " "},StringSplitOptions.RemoveEmptyEntries);
 
   for (int j = 0; j < LineContent.Length; j++)
   {
    
    
    Debug.Log(LineContent[j]);
   }
 
  }
 
}

(2)将TXT文件放在Resources文件夹下,通过Resources.Load(“XXX”) AsTextAsset实现。

/// 
/// 读取TXT
/// 
private void ReadTxtFromResources()
{
    
    
   TextAsset textAsset = Resources.Load("test") as TextAsset;
   string content = textAsset.text;//获取到文本内容
   string[] allLines = content.Split('n');//根据换行符“划分”出多个“行文本”
 
   for (int i = 0; i < allLines.Length; i++)//读取解析所有行
   {
    
    
      //解析出一行中的各列
      string[] LineContent = allLines[i].Split(new string[]{
    
    " "},StringSplitOptions.RemoveEmptyEntries);
 
    for (int j = 0; j < LineContent.Length; j++)
    {
    
    
      Debug.Log(LineContent[j]);
    }
   }
}

(3)通过协程与WWW读取解析存储于本地又或者服务端的TXT文件。

测试代码如下:

/// 
 /// 读取TXT 
 /// 
IEnumerator ReadTxtFromWWW() 
 {
    
     
    WWW www = newWWW("file://"+Application.dataPath+"/test.txt");
 
    yield return www;
 
    if (www.error != null) 
    {
    
     
        Debug.Log("www加载出错!"); 
    }
 
    else if (www.isDone) 
    {
    
     
        string content = www.text;//获取到文本内容
 
        string[] allLines = content.Split('n');//根据换行符“划分”出多个“行文本”
        
        for (int i = 0; i < allLines.Length; i++)//读取解析所有行 
        {
    
     
            //解析出一行中的各列 
            string[] LineContent =allLines[i].Split(new string[] {
    
     " " },StringSplitOptions.RemoveEmptyEntries);
 
            for (int j = 0; j < LineContent.Length; j++) 
            {
    
     
                Debug.Log(LineContent[j]); 
            } 
        } 
    }  
 } 
   //Use this for initialization
 
   voidStart () {
    
    
 
    StartCoroutine("ReadTxtFromWWW");//通过协程开启www加载读取解析TXT文档
 
   }
运行结果如上,这里略过。

(4)通过文件流的方式即StreamReader读取解析TXT文件

测试代码如下:

/// 
    /// 读取TXT 
    /// 
   private void ReadTxtFromStream() 
    {
    
     
       StreamReader sr = new StreamReader("Assets/test.txt");
 
       string content = sr.ReadToEnd();//获取到文本内容
        
       string[] allLines = content.Split('n');//根据换行符“划分”出多个“行文本”
 
       for (int i = 0; i < allLines.Length; i++)//读取解析所有行 
      {
    
    
 
        //解析出一行中的各列
 
        string[] LineContent = allLines[i].Split(new string[] {
    
     " " },StringSplitOptions.RemoveEmptyEntries);
        for (int j = 0; j < LineContent.Length; j++)
        {
    
     
           Debug.Log(LineContent[j]); 
        } 
       }
}

特别注意的是,StreamReader sr= new StreamReader(“Assets/test.txt”)的路径是“根目录”[默认]+“Asset/test.txt”。运行结果相同,略过截图。

原文链接: https://gameinstitute.qq.com/community/detail/111879

实例:

1.读取文本并输出除去空行的每一行内容


//读取文本并输出出去空行的每一行内容
 private void ReadTxt()
    {
    
    
        string content = textAsset.text;      
        content = content.Replace(" ", "");//空格
        //剔除所有空行
        while (content.Contains("\r\n\r\n"))//存在连续回车(空行)
        {
    
    
            content = content.Replace("\r\n\r\n", "\r\n");//换成一个回车
        }
        string[] allLines = content.Split('\n');
                      
        for (int i = 0; i < allLines.Length; i++)
        {
    
    
            Debug.Log(allLines[i]);
        }
    }

文本
在这里插入图片描述

输出
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45023328/article/details/119331082#comments_22686341