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]);
}
}
文本
输出