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

作者:gd_2015 时间:2023-07-05 12:24:05 

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] //一定要有,同时不能继承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文件夹下创建个test.txt

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


{"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("http://www.weather.com.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);
   }
}

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

来源:https://blog.csdn.net/wdsdsdsds/article/details/50592066

标签:Unity,读取文件,TextAsset
0
投稿

猜你喜欢

  • C语言植物大战数据结构二叉树递归

    2022-02-13 14:12:06
  • 如何在Spring Boot应用中优雅的使用Date和LocalDateTime的教程详解

    2023-03-14 04:54:11
  • MyBatis中基于别名typeAliases的设置

    2022-03-07 22:18:19
  • c# 成员类型访问权限低于字段本身的实现

    2021-12-23 07:08:27
  • Java关于桶排序的知识点总结

    2023-12-06 03:18:04
  • 安卓逆向分析之酷狗signature案例分享

    2022-12-06 21:23:37
  • java 创建自定义数组

    2022-09-02 11:18:45
  • C#实现XML文件读取

    2023-03-06 13:38:44
  • Spring Boot实现数据访问计数器方案详解

    2022-12-17 08:40:16
  • Java ArrayList实现班级信息管理系统

    2023-09-17 15:15:25
  • Android 自定义View实现单击和双击事件的方法

    2022-03-23 19:21:18
  • Android仿银行客户签名并且保存签名的截图文件并命名为本地时间

    2023-09-19 22:42:48
  • Spring Security认证提供程序示例详解

    2022-11-07 18:06:40
  • SpringBoot下如何实现支付宝接口的使用

    2023-11-06 14:26:15
  • AndroidStduio3.0 使用gradle将module打包jar文件的方法

    2023-07-01 06:57:20
  • a2sd+状态下应用程序丢失的解决方法详细解析

    2023-04-20 16:08:11
  • java 回调机制的实例详解

    2023-12-04 10:03:04
  • 为什么wait和notify必须放在synchronized中使用

    2022-07-20 07:32:39
  • Android获取SD卡路径及SDCard内存的方法

    2021-12-30 17:04:58
  • Spring Boot使用Allatori代码混淆的方法

    2023-11-24 16:34:55
  • asp之家 软件编程 m.aspxhome.com