欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【常用方法】字典的创建和调用

程序员文章站 2024-01-14 09:06:52
...

游戏制作有的时候需要用到一类文字或者数字的数据,比如物品信息等。这时候如果把数据全都放在一个文本里,然后需要时再加以调用,就能够高效管理,这就是字典的用处。这种行为和查字典很像,根据目录索引查找到某个值,然后就能翻到对应数据,获取其全部信息。

其实这个好像是C#的知识,不过也一样,本篇说一下Unity中字典怎么创建和调用。

1.创建文件夹并添加文本文件

在“项目”窗口新建一个文件夹"Resources",这样可以代码加载文件,而不用public再拖进脚本框。不过Resources文件读取有可能会影响性能。

在"Resources"里再建一个“Texts”的文件夹,用于存放读取的文件,再将带有信息的文本文件拖入该文件夹内。

【常用方法】字典的创建和调用

这里以“Information.txt”文件为例,就一个普通的文本文档,注意几点:文本用UTF-8编码,逗号用英文(半角)。文本内容如下所示:

1001,衬衫,9.15
1002,银鳞胸甲,5

2.创建字典脚本

建一个脚本,将其命名为NewDictionary,用来编写字典的建立。

字典创建的脚本如下,这里是用ID来作为查找索引,如果有需要可以根据【】内的提示改成按名称来查找。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TheInformations   //给外部引用的类
{
    public int id;          //序号
    public string name;     //物品名称
    public float price;     //价格
}

public class NewDictionary : MonoBehaviour
{

    private TextAsset informationText;          //字典内容的来源文本
    private Dictionary<int, TheInformations> weaponInforDict = new Dictionary<int, TheInformations>(); //创建以整数为基础的字典【这里可以改为string】

    public static NewDictionary _instance;      //本脚本字典实例化(便于给其他脚本调用)


    //游戏开始时
    private void Awake()
    {
        _instance = this;  //实例化本身

        informationText = Resources.Load("Texts/Information") as TextAsset;  //从文件夹中读取文本
        ReadInformation();//读取文本内容事件
    }

    //读取文本内容事件
    void ReadInformation()
    {
        string text = informationText.text;  //文本内容赋给字符串
        string[] strArray = text.Split('\n');//通过换行符,拆分成数组

        foreach (string str in strArray)     //for循环输入字典(数组中的每个字符串)
        {
            string[] propertyArray = str.Split(',');      //通过逗号,拆分成单独句子
            TheInformations infor = new TheInformations();//存储单份信息

            int id = int.Parse(propertyArray[0]);         //ID设为第一份,以此类推
            string name = propertyArray[1];
            float price = float.Parse(propertyArray[2]);

            infor.id = id;
            infor.name = name;
            infor.price = price;

            weaponInforDict.Add(id, infor);//添加到字典中 id为索引,根据id查找物品信息【这里可以改为name, infor】
        }
    }

    //供给外部调用的方法
    public TheInformations GetInforFromID(int id)   //【这里可以改为string name】
    {
        TheInformations infor = null;                 //先把信息清空
        weaponInforDict.TryGetValue(id, out infor);   //ID对应每个信息【这里可以改为name, out infor】
        return infor;                                 //返回信息值
    }
}

 

另外创建一个脚本,命名为GetInformation,用来获取调用字典,从而得到想要的信息。输出的方式也可以自定义,这里直接放到控制台里显示。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GetInformation : MonoBehaviour
{
    private NewDictionary Dict;  //字典脚本
    private TheInformations information;//字典信息
    private int ID;  //指定ID用来找字典


    private void Start()
    {
        Dict = this.GetComponent<NewDictionary>();  //获取字典脚本
    }


    private void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))//如果按下空格键
            GetInfor();//获取信息
    }

    //获取信息的方法
    private void GetInfor()
    {
        for (ID=1001; ID<1003;ID++)//从1001循环到1002
        {
            information = NewDictionary._instance.GetInforFromID(ID);   //根据ID查找字典获取信息
            Debug.Log("物品名:" + information.name + ",售价为:" + information.price);//输出名字和价格的对应信息
        }
    }
}

3.挂上脚本运行

保存好两个脚本之后,将他们挂载于同一个物体上(主要是这里GetInformation里写的是获取本身的脚本,脚本挂哪都无所谓),然后运行。

按下空格键后,我们可以看到控制台显示了对应的信息。

【常用方法】字典的创建和调用

相关标签: 常用方法