Unity 读取文件 TextAsset读取配置文件方式

时间:2021-05-20

1 支持文件类型

.txt

.html

.htm

.xml

.bytes

.json

.csv

.yaml

.fnt

2 寻找文件

1 //Load texture from disk

TextAsset bindata= Resources.Load("Texture") as TextAsset; Texture2D tex = new Texture2D(1,1); tex.LoadImage(bindata.bytes);

2 直接在编辑器中赋值

public TextAsset textFile;

3 配置文件通常分行配置属性

例如:

英雄名称,等级,生命,攻击

hero1,1,1,1 hero2,1,1,1 string[] lines = textFile.text.Split("\n"[0]); 可以读出属性 lines[0] = "英雄名称,等级,生命,攻击" lines[1] = "hero1,1,1,1" lines[2] = "hero2,1,1,1"

然后可以读出每条数据的具体属性

for (int i = 0; i < lines.Length - 2; i++) { string[] parts = lines[i + 1].Split(","[0]); } parts[0] = "hero1" parts[1] = "1" parts[2] = "1" parts[2] = "1

补充:Unity加载TextAsset中的内容为空

需求需要从Resources目录下加载json文件,于是在目录下创建了个txt文本,然后修改后缀名为.Json,

用Resource.Load<TextAsset>() 发现TextAsset.text竟然为空,里面什么都没有,以为是.Json首字母大写的缘故,于是改为.json,结果还没有用,

新开工程却发现用脚本生成的json文件却是可以获取到的,再仔细检查发现选中json文件的时候属性面板竟然什么都没显示出来,于是怀疑json文件不正确没有被unity识别到,用vs高级保存选项发现文本竟然是GBK2312格式,改为UTF-8格式发现可以显示出来并能读取到text。

于是怀疑是创建txt文本时默认编码格式不正确,发现默认编码格式是ASCII格式,看来以后创建json的时候更要注意编码格式的问题了。

补充:Unity 简易读取配置文件内容(txt,懒人用)

翻以前别人写的一个项目,看到读取本地配置文件的,目前虽然不太懂,但是先放着,估摸以后牛B了就看懂了

首先自定义一个config类:

using UnityEngine;using System.Collections;using System;[Serializable] //一定要有,同时不能继承MonoBehaviourpublic class Config { public int Num1; //我文档里有2个int,2个string类型 public int Num2; public string String1; public string String2; // Use this for initialization void Start () {} private static Config _data; public static Config _Data { get { if (_data == null) { string json = System.IO.File.ReadAllText(Application.streamingAssetsPath + "/test.txt"); _data = JsonUtility.FromJson<Config>(json); } return _data; } } }

然后在unity 的StreamingAssets文件夹下创建个test.txt

里面内容:(一定要有花括号)

{"Num1":30,"Num2":60,"String1":"aaa","String2":"bbb"}

然后再其他脚本里,直接调用就好了

例如:

using UnityEngine;using System.Collections;public class LoadConfig : MonoBehaviour {// Use this for initializationvoid Start () { print(Config._Data.Num1); print(Config._Data.String2); }// Update is called once per framevoid Update () {}}

2017.3.27更新:自己又理解了一点

如果要读取网页某天气信息,但是不止一个花括号,分了几层,需要怎么做?

例如信息:

{"weatherinfo":{"city":"北京","cityid":"101010100","temp":"18","WD":"东南风","WS":"1级","SD":"17%","WSE":"1","time":"17:05","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB","njd":"暂无实况","qy":"1011","rain":"0"}}

上面的就不多复述,大概思路就是再建立一个类保存二级信息

Config类修改如下(之前的全部删除):

using UnityEngine;using System.Collections;using System.Collections.Generic;using System;[Serializable] //一定要有,同时不能继承MonoBehaviourpublic class Config { public Weatherinfo weatherinfo; //这里的weatherinfo 就是上面信息的第一层weatherinfo,建立父级保存信息(名字要对应天气的weatherinfo)}[Serializable]public class Weatherinfo //weatherinfo下的信息保存,类里的city 对应信息里的city,一次类推,我就写2个了;{ public string city; public int cityid;}

再新建一个名字为Load.cn/data/sk/101010100.html");//加载某网页数据,根据自己需求改 yield return w; string json = w.text; print(json); _config = JsonUtility.FromJson<Config>(json); } void LoadMessage() { print(_config.weatherinfo.city); print(_config.weatherinfo.cityid); }}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章