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 = textFile.text.Split("\n"[0]); 可以讀出屬性
lines[0] = "英雄名稱,等級,生命,攻擊"
lines[1] = "hero1,1,1,1"
lines[2] = "hero2,1,1,1"
然后可以讀出每條數(shù)據(jù)的具體屬性
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中的內(nèi)容為空
需求需要從Resources目錄下加載json文件,于是在目錄下創(chuàng)建了個txt文本,然后修改后綴名為.Json,
用Resource.Load<TextAsset>() 發(fā)現(xiàn)TextAsset.text竟然為空,里面什么都沒有,以為是.Json首字母大寫的緣故,于是改為.json,結果還沒有用,
新開工程卻發(fā)現(xiàn)用腳本生成的json文件卻是可以獲取到的,再仔細檢查發(fā)現(xiàn)選中json文件的時候屬性面板竟然什么都沒顯示出來,于是懷疑json文件不正確沒有被unity識別到,用vs高級保存選項發(fā)現(xiàn)文本竟然是GBK2312格式,改為UTF-8格式發(fā)現(xiàn)可以顯示出來并能讀取到text。
于是懷疑是創(chuàng)建txt文本時默認編碼格式不正確,發(fā)現(xiàn)默認編碼格式是ASCII格式,看來以后創(chuàng)建json的時候更要注意編碼格式的問題了。
補充:Unity 簡易讀取配置文件內(nèi)容(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 + "/test.txt");
_data = JsonUtility.FromJson<Config>(json);
}
return _data;
}
}
}
然后在unity 的StreamingAssets文件夾下創(chuàng)建個test.txt
里面內(nèi)容:(一定要有花括號)
{"Num1":30,"Num2":60,"String1":"aaa","String2":"bbb"}
然后再其他腳本里,直接調(diào)用就好了
例如:
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更新:自己又理解了一點
如果要讀取網(wǎng)頁某天氣信息,但是不止一個花括號,分了幾層,需要怎么做?
例如信息:
{"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的腳本,用于讀取網(wǎng)絡的數(shù)據(jù):
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("http://www.weather.com.cn/data/sk/101010100.html");//加載某網(wǎng)頁數(shù)據(jù),根據(jù)自己需求改
yield return w;
string json = w.text;
print(json);
_config = JsonUtility.FromJson<Config>(json);
}
void LoadMessage()
{
print(_config.weatherinfo.city);
print(_config.weatherinfo.cityid);
}
}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
- 在unity腳本中控制Inspector面板的參數(shù)操作
- C#中public變量不能被unity面板識別的解決方案
- Unity使用物理引擎實現(xiàn)多旋翼無人機的模擬飛行
- 在Unity中使用全局變量的操作
- unity 切換場景不銷毀物體問題的解決
- Unity 靜態(tài)變量跨場景操作
- Unity3D 單例模式和靜態(tài)類的使用詳解
- 解決在Unity中使用FairyGUI遇到的坑
- Unity3d 如何更改Button的背景色
- Unity3d使用FairyGUI 自定義字體的操作
- Unity3D運行報DllNotFoundException錯誤的解決方案
- Unity游戲之存儲數(shù)據(jù)
相關文章
在C#中使用二叉樹實時計算海量用戶積分排名的實現(xiàn)詳解
這篇文章主要介紹了在C#中使用二叉樹實時計算海量用戶積分排名的實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-01-01

