2016-01-07 20:14:47 u013086341 阅读数 364
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4641 人正在学习 去看看 张刚
using UnityEngine;
using System.Collections;
using System.IO;
using System;

public class ReadOrSaveFile : MonoBehaviour
{
    //保存信息到文件
    public void SaveContentToFile(string _Path,string _fileName, string _content)
    {
        //string fileName = "Text_" + DateTime.Now.ToString("yyyy_MM_dd_H_m_s") + ".txt"; 时间命名文件名
        string directoryPath = _Path;        
        string filename = _fileName;            
        if (!Directory.Exists(directoryPath))  
        {
            Directory.CreateDirectory(directoryPath);
        }
        StreamWriter sw = new StreamWriter(Path.Combine(directoryPath, _fileName));
        sw.Write(_content);
        sw.Flush(); //清楚缓存内容
        sw.Close();

    }
    //截屏
    public void captureScreenshot(string path)
    {
        string _path = Path.Combine(path, "GameLog_" + DateTime.Now.ToString("yyyy_MM_dd_H_m_s") + ".png");
        Application.CaptureScreenshot(_path);
    }
    //读取文件中信息
    public ArrayList GetContentInFile(string _Path, string _content)
    {
        ArrayList arrayList = new ArrayList();
        StreamReader sr = null;     //使用流的形式读取
        sr = File.OpenText(_Path);
        if (sr != null)
        {
            string str;
            while ((str = sr.ReadLine())!= null)
            {
                arrayList.Add(str);
            }
        }
        sr.Close();     //关闭流
        sr.Dispose();   //销毁流
        return arrayList;

    }
}

2018-07-09 16:31:52 liaoshengg 阅读数 535
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4641 人正在学习 去看看 张刚

解析txt文本操作

第一种方式 Resources加载

  • 将txt文本资源放入Resources文件夹
    这里写图片描述

  • 加载文本资源,获取文本资源

public class TxtTest : MonoBehaviour {

    private string _content;
    void Awake(){
        TextAsset t = Resources.Load ("Home") as TextAsset;
        Debug.Log (t.text);
    }
}

第二种方式:拖入文本

这里写图片描述

public class TxtTest : MonoBehaviour {

    private string _content;
    public TextAsset _ta;

    void Start(){
        _content = _ta.text;
    }
}

读取每一行文本内容

前言: 当我们获得到文本全部内容时,我们需要将读取的内容放进类容器里储存
  1. 先对每一行进行拆分,使用Split()方法
  2. 遍历每行内容
  3. 然后对每行内容进行赋值,用Item类储存,然后添加进List容器里
    public void GetItemGroupByContent(string _content) {
        //使用换行符对文本内容进行拆分
        string[] lines = _content.Split ('\n');

        for (int i = 0; i < lines.Length; ++i) {
            string line = lines [i];
            string[] strs = line.Split (',');
            Item item = new Item ();
            item.ID = int.Parse (strs [0]);
            item.Name = strs [1];
            item.IconName = strs [2];
            _ItemGroup.Add (item);
        }
    }

后续

一般而言,在不同系统的Resource路径可能都不同,不能直接使用Resouce或其他相对,绝对路径加载,一般都用沙河路径来储存文本内容。并且在沙河路径创建文档,并修改这个文档

2017-12-15 21:09:14 zxy13826134783 阅读数 28950
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4641 人正在学习 去看看 张刚

//注意:要读取的文件的编码类型要为utf-8,不然会出现中文乱码或者直接不显示,如果是其它编码方式可以把文件
//另保存为utf-8的格式




using UnityEngine;
using System.Collections;
using System.IO;//用法三的时候需要定义这个
using System.Text;//法二的时候需要使用定义这个


public class GUTexture : MonoBehaviour {
    GUIText m_GUIText;
    public TextAsset m_TextAsset;             //法一 ,这个需要在unity编辑器进行赋值,把.txt文本文件保存在Asset下的     Resources文件夹下,然后把.txt文件拖拽过来进行赋值
    TextAsset m_TextAsset1;
    string m_Str;
    string m_FileName;                             //法二要用
    string[] strs;                                        //法二要用

void Start () {
        m_GUIText = gameObject.GetComponent<GUIText>();               //找到该游戏物体的GUIText组件,用来显示读取到 的文本
        m_FileName = "Z800虚拟头盔说明书链接UTF-8.txt";                       //法二要用,要读取的文件名,这个是相对路径
}

 

   //鼠标进入该游戏物体执行 

    void OnMouseEnter() {

      m_GUIText.text = Resources.Load<TextAsset>("Z800虚拟头盔说明书链接").text;//法一,需要把文本文件保存在Asset文   件夹下的Resources文件夹内

        

 

 

       // ReadFile(m_FileName);//法二

       //m_GUIText.text = m_Str;//把读取到的内容放到GUIText组件中显示

 

 

        

 

       // Read();//法三

     //m_GUIText.text =m_Str;//把读取到的内容放到GUIText组件中显示

 

    }

 

 

 

 

//方法二:通过ReadFile(名字自己定义)方法来读取,传入的是文件路径
   void ReadFile(string FileName) {
        strs = File.ReadAllLines(FileName);//读取文件的所有行,并将数据读取到定义好的字符数组strs中,一行存一个单元
        for (int i = 0; i < strs.Length; i++)
        {
            m_Str += strs[i];//读取每一行,并连起来
            m_Str += "\n";//每一行末尾换行
        }
    }
     

 

 

 

 

 

 

   

//方法三: 下面这个是通过文件流来读取txt文件的方法
  /*  public void Read()
    {
        try
        {


            string pathSource = m_FileName;


            using (FileStream fsSource = new FileStream(pathSource,
                        FileMode.Open, FileAccess.Read))
            {
                // Read the source file into a byte array.  
                byte[] bytes = new byte[fsSource.Length];
                int numBytesToRead = (int)fsSource.Length;
                int numBytesRead = 0;
                while (numBytesToRead > 0)
                {
                    int n = fsSource.Read(bytes, numBytesRead, numBytesToRead);


                    if (n == 0)
                        break;
                    numBytesRead += n;
                    numBytesToRead -= n;
                }
                numBytesToRead = bytes.Length;
                //text = Encoding.Default.GetString(bytes);  
                m_Str= UTF8Encoding.UTF8.GetString(bytes);
            }
        }
        catch
        {
            //ioEx.Message  
        }
    }  
   

   */

 

 

 

 

 

/* 法四

   using System.IO;
  using System.Text;

 

   Debug.Log(File.ReadAllText("C:\\Users\\zxy\\Desktop\\Z800虚拟头盔说明书链接.txt", Encoding.Default));                                       // ReadAllText方法第一个参数是要读取txt文件的路径,第二个参数是编码方式,这里采用默认

*/       

 

 

 

 

/*一种以追加的方式写入txt方法

using System.IO;
using System.Text;

 File.AppendAllText("C:\\Users\\zxy\\Desktop\\Z800虚拟头盔说明书链接.txt", "我被写进来了",Encoding.Default);

//第一个参数是要写入的文件路径,第二个参数是要写入的文本,第三个参数是编码方式

*/

   
}

2018-10-12 16:47:46 qq_39097425 阅读数 188
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4641 人正在学习 去看看 张刚

写这个是因为想把 txt文件当成配置文件,即一对一,类似键值对一样存取信息

1. txt保存在StreamingAssets文件夹下  一 一 对应,用逗号分隔 

2.代码如下:

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.SceneManagement;

public class TxtHandle : MonoBehaviour {
   public static string[] configAry;
    string txtName = "configuration.txt";
	// Use this for initialization
	void Start () {
       //StartCoroutine(WWWLoadTxtFile("/" + txtName));
        IOLoadTxtFile(txtName);

    }

    /// <summary>
    /// 文件流读取Txt文件
    /// </summary>
    /// <param name="_filePath"></param>
    void IOLoadTxtFile(string _filePath)
    {
        //本地路径
        var fileAddress = System.IO.Path.Combine(Application.streamingAssetsPath, _filePath);
        FileInfo fInfo0 = new FileInfo(fileAddress);
        string s = "";
        if (fInfo0.Exists)
        {
            StreamReader r = new StreamReader(fileAddress);
            s = r.ReadToEnd();
            configAry = s.Trim().Split(',');
            SceneManager.LoadScene(1);
            Debug.Log(s);
        }
    }

    /// <summary>
    ///  www类 加载txt文件
    /// </summary>
    /// <param name="_filePath"></param>
    /// <returns></returns>
    public  IEnumerator  WWWLoadTxtFile(string _filePath)
    {
        print(Application.streamingAssetsPath);
        WWW www = new WWW(Application.streamingAssetsPath + _filePath);
        yield return www;
        if (www.error == null)
        {
            configAry = www.text.ToString().Trim().Split(',');
            foreach (var item in configAry)
            {
                print(item);
            }
            SceneManager.LoadScene(1);
        }
        else
        {
            Debug.Log(www.error);
        }
    }

    /// <summary>
    /// 根据传过来的 string 返回 该字符串在txt文件中的下一个字符串
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public static string TxtReadStr(string str)
    {
        string tempStr = null;
        for (int i = 0; i < TxtHandle.configAry.Length; i++)
        {
            if (TxtHandle.configAry[i].Trim().Equals(str, StringComparison.CurrentCulture))
            {
                tempStr = TxtHandle.configAry[i + 1];
                break;
            }
        }
        return tempStr;
    }

}

3. 用法示例:

        m_ipAddress = TxtHandle.TxtReadStr("serverIP");
        m_port = int.Parse(TxtHandle.TxtReadStr("port"));
        print(" ---------------->ip" + m_ipAddress + "port" + m_port);

4.结果如下:

2017-11-18 21:25:55 u013005924 阅读数 7532
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4641 人正在学习 去看看 张刚

用Unity的TextAsset读取TXT文档内容,将物品信息存入字典中


Text Asset 文本资源

Text Assets are a format for imported text files. When you drop a text file into your Project Folder, it will be converted to a Text Asset. The supported text formats are:

文本资源是导入的文本文件的一个格式。当你拖入一个文本文件到你的项目时,他会被转换为文本资源。支持的文本格式有:

.txt
.html
.htm
.xml
.bytes

Properties 属性

Text
The full text of the asset as a single string.


物品属性分析

物品属性分析

之后需要新建一个文本txt来存放物品的属性,这里以药品为例

TXT文档内容

TXT文档内容

每一行文本对应一种物品,用逗号分隔,每个值对应属性表里的每一列属性。

之后新建c#脚本解析文本内容

private TextAsset objectsInfoListText; // 新建TextAsset变量
private Dictionary<int, ObjectInfo> objectInfoDict = new Dictionary<int,ObjectInfo>();

void Awake()
{
    objectsInfoListText = Resources.Load("ObjectsInfoList") as TextAsset; // 从Resouces的path中读取到文件
    ReadInfo();
}
void ReadInfo()
{
     string text = objectsInfoListText.text;  // 将文本内容作为字符串读取
     string[] objInfoArray = text.Split('\n'); // 以\n为分割符将文本分割为一个数组
     foreach (string str in objInfoArray)  // 遍历每一行并将每一个药品的值放入类对象中,并存入字典
     {
         ObjectInfo info = new ObjectInfo();
         string[] propertyArray = str.Split(',');
         int id = int.Parse(propertyArray[0]);
         string name = propertyArray[1];
         string icon_name = propertyArray[2];
         string str_type = propertyArray[3];
         ObjectType type = ObjectType.Drug;
         switch (str_type)
         {  
             case "Equip":
                 type = ObjectType.Equip;
                 break;
             case "Mat":
                 type = ObjectType.Mat;
                 break;
             case "Drug":
                 type = ObjectType.Drug;
                 break;
         }

         info.id = id; info.name = name; 
         info.icon_name = icon_name; info.type = type;

         if (type == ObjectType.Drug)
         {
             int hp = int.Parse(propertyArray[4]);
             int mp = int.Parse(propertyArray[5]);
             int price_sell = int.Parse(propertyArray[6]);
             int price_buy = int.Parse(propertyArray[7]);

             info.hp = hp; info.mp = mp; info.price_sell = price_sell; info.price_buy = price_buy;
         }

         // 将物品信息存储到字典中
         objectInfoDict.Add(id, info);
     }
}

public enum ObjectType
{
    Drug,
    Equip,
    Mat,
};

public class ObjectInfo 
{
    public int id;
    public string name;
    public string icon_name;
    public ObjectType type;
    public int hp;
    public int mp;
    public int price_sell;
    public int price_buy;
}

在 Unity3D 中读写 CSV 文件

博文 来自: eazey_wj

unity3d读写txt

阅读数 43

没有更多推荐了,返回首页