【常用方法】字典的创建和调用
程序员文章站
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里写的是获取本身的脚本,脚本挂哪都无所谓),然后运行。
按下空格键后,我们可以看到控制台显示了对应的信息。
上一篇: (Java学习笔记)JavaSE 集合概述及Collections工具类
下一篇: js提交表单