一、创建csv文件
-
打开Excel,创建xlsx格式文件
-
编辑卡牌数据:这里共写了两类卡牌,第一类是灵物卡,具有编号、卡名、生命、攻击四个属性;第二类是法术卡,具有编号、卡名、效果三个属性。每类卡的第一行以"#"开头,后面以卡牌类型单词开头
- 保存文件,导出为csv格式
- csv格式是将各个数据用逗号分隔,最终的效果如下所示:
- 创建一个名为Data的文件夹,将csv文件移动到此文件夹
二、创建CardStore脚本
在此之前,已经定义了Card类,Card类又分为SpiritCard类和SpellCard类。每张卡牌都有编号和卡名两个属性,灵物卡有生命值、最大生命值、攻击力三个属性,法术卡有一个效果属性,并且每个类都有其对应的构造方法。Card类代码如下:
cs
public class Card
{
public int id;
public string name;
public Card(int _id, string _name)
{
this.id = _id;
this.name = _name;
}
}
// 灵物卡
public class SpiritCard : Card
{
public int HP;
public int maxHP;
public int ATK;
public SpiritCard(int _id, string _name, int _maxHP, int _ATK) : base(_id, _name)
{
this.HP = _maxHP;
this.maxHP = _maxHP;
this.ATK = _ATK;
}
}
// 法术卡
public class SpellCard : Card
{
public string description;
public SpellCard(int _id, string _name, string _description) : base(_id, _name)
{
description = _description;
}
}
- 创建卡牌数据的文本资源文件
cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
public class CardStore : MonoBehaviour
{
// 创建卡牌数据的文本资源文件
public TextAsset cardData;
}
- 创建allCards链表用来存储所有卡牌
cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
public class CardStore : MonoBehaviour
{
// 创建卡牌数据的文本资源文件
public TextAsset cardData;
// 创建cards链表用来存储所有卡牌
public List<Card> allCards = new List<Card>();
}
- 定义一个loadCardData方法,用来加载卡牌数据
定义一个字符串数组dataRow,将每一行的数据存储到dataRow中的每个元素中
cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
public class CardStore : MonoBehaviour
{
// 创建卡牌数据的文本资源文件
public TextAsset cardData;
// 创建cards链表用来存储所有卡牌
public List<Card> allCards = new List<Card>();
// 加载所有卡牌数据
public void loadCardData()
{
// 用回车分割每一行
string[] dataRow = cardData.text.Split("\n");
}
}
- 使用foreach遍历文件中的每行数据,再定义一个字符串数组data,将每一个数据存储到data中的每个元素中。使用if语句判断每行的第一个元素是否为"#",如果是则跳过这行
cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
public class CardStore : MonoBehaviour
{
// 创建卡牌数据的文本资源文件
public TextAsset cardData;
// 创建cards链表用来存储所有卡牌
public List<Card> allCards = new List<Card>();
// 加载所有卡牌数据
public void loadCardData()
{
// 用回车分割每一行
string[] dataRow = cardData.text.Split("\n");
// 用逗号分割每个数据
foreach(string row in dataRow) {
string[] data = row.Split(",");
if(data[0] == "#") {
continue;
}
}
}
}
- 将导入的数据存储到对应变量中,创建卡牌对象,并添加到allCards链表中
使用Debug.Log语句在控制台打印数据
cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
public class CardStore : MonoBehaviour
{
// 创建卡牌数据的文本资源文件
public TextAsset cardData;
// 创建cards链表用来存储所有卡牌
public List<Card> allCards = new List<Card>();
// 加载所有卡牌数据
public void loadCardData()
{
// 用回车分割每一行
string[] dataRow = cardData.text.Split("\n");
// 用逗号分割每个数据
foreach(string row in dataRow) {
string[] data = row.Split(",");
if(data[0] == "#") {
continue;
}
// 将导入的数据存储到对应变量中,创建卡牌对象,并添加到allCards链表中
int id;
string name;
switch(data[0]) {
case "Spirit":
id = int.Parse(data[1]);
name = data[2];
int HP = int.Parse(data[3]);
int ATK = int.Parse(data[4]);
SpiritCard spiritCard = new SpiritCard(id, name, HP, ATK);
allCards.Add(spiritCard);
Debug.Log("链表中第" + allCards.Count + "个卡牌是:" + spiritCard.name);
break;
case "Spell":
id = int.Parse(data[1]);
name = data[2];
string desdescription = data[3];
SpellCard spellCard = new SpellCard(id, name, desdescription);
allCards.Add(spellCard);
Debug.Log("链表中第" + allCards.Count + "个卡牌是:" + spellCard.name);
break;
}
}
}
}
- 在游戏开始时调用loadCardData方法
cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
public class CardStore : MonoBehaviour
{
// 创建卡牌数据的文本资源文件
public TextAsset cardData;
// 创建cards链表用来存储所有卡牌
public List<Card> allCards = new List<Card>();
void Start()
{
loadCardData();
}
// 加载所有卡牌数据
public void loadCardData()
{
// 用回车分割每一行
string[] dataRow = cardData.text.Split("\n");
// 用逗号分割每个数据
foreach(string row in dataRow) {
string[] data = row.Split(",");
if(data[0] == "#") {
continue;
}
// 将导入的数据存储到对应变量中,创建卡牌对象,并添加到allCards链表中
int id;
string name;
switch(data[0]) {
case "Spirit":
id = int.Parse(data[1]);
name = data[2];
int HP = int.Parse(data[3]);
int ATK = int.Parse(data[4]);
SpiritCard spiritCard = new SpiritCard(id, name, HP, ATK);
allCards.Add(spiritCard);
Debug.Log("链表中第" + allCards.Count + "个卡牌是:" + spiritCard.name);
break;
case "Spell":
id = int.Parse(data[1]);
name = data[2];
string desdescription = data[3];
SpellCard spellCard = new SpellCard(id, name, desdescription);
allCards.Add(spellCard);
Debug.Log("链表中第" + allCards.Count + "个卡牌是:" + spellCard.name);
break;
}
}
}
}
三、创建CardStore游戏物体
- 创建Card Store游戏物体存储卡牌数据
- 在Card Store游戏物体上添加CardStore脚本
- 将Card List.csv文件挂载到CardStore脚本上
- 点击运行,控制台的输出如下图所示:
本章完。感谢阅读!