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

 更新时间:2021年04月13日 14:41:02   作者:gd_2015  
这篇文章主要介绍了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"

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

        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);
    }
}

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

相关文章

  • 关于C# Math 处理奇进偶不进的实现代码

    关于C# Math 处理奇进偶不进的实现代码

    下面小编就为大家带来一篇关于C# Math 处理奇进偶不进的实现代码。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 在Unity中实现简单的伪时间同步

    在Unity中实现简单的伪时间同步

    这篇文章主要介绍了在Unity中实现简单的伪时间同步,为什么说是伪同步呢,因为仅仅是获取的数据库所在服务器的系统时间,分享给大家,有需要的小伙伴可以参考下
    2015-03-03
  • C#实现注册码的方法

    C#实现注册码的方法

    这篇文章主要介绍了C#实现注册码的方法,可实现C#生成软件注册码的相关功能,涉及C#硬件操作及随机数操作的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-08-08
  • C#创建数据库及附加数据库的操作方法

    C#创建数据库及附加数据库的操作方法

    这篇文章主要介绍了C#创建数据库及附加数据库的操作方法,涉及C#针对数据库常见的创建、添加、连接等操作技巧,需要的朋友可以参考下
    2016-06-06
  • C#判断多个文本框是否为空的方法

    C#判断多个文本框是否为空的方法

    这篇文章主要介绍了C#判断多个文本框是否为空的方法,可实现对多个文本框的遍历、判断及提示等功能,需要的朋友可以参考下
    2015-06-06
  • C#串口编程实例代码

    C#串口编程实例代码

    这篇文章主要为大家详细介绍了C#串口编程实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • C#实现控制电脑注销,关机和重启

    C#实现控制电脑注销,关机和重启

    这篇文章主要为大家介绍了C#如何实现控制电脑注销,关机和重启功能,本案例涉及的知识点包含:Process、Shell32.dll、User32.dll、Struct数据结构,感兴趣的可以了解一下
    2022-09-09
  • 详解WPF如何动态生成DataGrid的行和列

    详解WPF如何动态生成DataGrid的行和列

    在日常开发中,DataGrid作为二维表格,非常适合数据的展示和统计,本文以一些简单的小例子,简述在WPF开发中,如何动态生成DataGrid的行和列,需要的可以了解下
    2024-02-02
  • Unity使用LineRender实现绘画功能

    Unity使用LineRender实现绘画功能

    这篇文章主要为大家详细介绍了Unity使用LineRender实现绘画功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • 基于数据类型转换(装箱与拆箱)与常量详解

    基于数据类型转换(装箱与拆箱)与常量详解

    下面小编就为大家分享一篇基于数据类型转换(装箱与拆箱)与常量详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11

最新评论