Unity读取⽂件TextAsset读取配置⽂件⽅式
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 = Split("\n"[0]); 可以读出属性
lines[0] = "英雄名称,等级,⽣命,攻击"
lines[1] = "hero1,1,1,1"json检查
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>() 发现竟然为空,⾥⾯什么都没有,以为是.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] //⼀定要有,同时不能继承MonoBehaviour
public 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 + "/");
_data = JsonUtility.FromJson<Config>(json);
}
return _data;
}
}
}
然后在unity 的StreamingAssets⽂件夹下创建个
⾥⾯内容:(⼀定要有花括号)
{"Num1":30,"Num2":60,"String1":"aaa","String2":"bbb"}
然后再其他脚本⾥,直接调⽤就好了
例如:
using UnityEngine;
using System.Collections;
public class LoadConfig : MonoBehaviour {
/
/ Use this for initialization
void Start () {
print(Config._Data.Num1);
print(Config._Data.String2);
}
// Update is called once per frame
void 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] //⼀定要有,同时不能继承MonoBehaviour
public class Config {
public Weatherinfo weatherinfo; //这⾥的weatherinfo 就是上⾯信息的第⼀层weatherinfo,建⽴⽗级保存
信息(名字要对应天⽓的weatherinfo)
}
[Serializable]
public class Weatherinfo //weatherinfo下的信息保存,类⾥的city 对应信息⾥的city,⼀次类推,我就写2个了;
{
public string city;
public int cityid;
}
再新建⼀个名字为LoadWWW的脚本,⽤于读取⽹络的数据:
using UnityEngine;
using System.Collections;
using System;
public class LoadWWW : MonoBehaviour {
Config _config = new Config();
// Use this for initialization
void Start () {
StartCoroutine("load");
Invoke("LoadMessage", 1f);
}
// Update is called once per frame
void Update () {
}
IEnumerator load()
{
WWW w = new WWW("www.weather/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);
}
}
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论