【Unity2D 2022:Data】读取csv格式文件的数据

一、创建csv文件

1. 打开Excel,创建xlsx格式文件

2. 编辑卡牌数据:这里共写了两类卡牌,第一类是灵物卡,具有编号、卡名、生命、攻击四个属性;第二类是法术卡,具有编号、卡名、效果三个属性。每类卡的第一行以“#”开头,后面以卡牌类型单词开头

3. 保存文件,导出为csv格式

4. csv格式是将各个数据用逗号分隔,最终的效果如下所示:

5. 创建一个名为Data的文件夹,将csv文件移动到此文件夹

二、创建CardStore脚本

        在此之前,已经定义了Card类,Card类又分为SpiritCard类和SpellCard类。每张卡牌都有编号和卡名两个属性,灵物卡有生命值、最大生命值、攻击力三个属性,法术卡有一个效果属性,并且每个类都有其对应的构造方法。Card类代码如下:

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

1. 创建卡牌数据的文本资源文件

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;public class CardStore : MonoBehaviour
{// 创建卡牌数据的文本资源文件public TextAsset cardData;
}

2. 创建allCards链表用来存储所有卡牌

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

3. 定义一个loadCardData方法,用来加载卡牌数据

        定义一个字符串数组dataRow,将每一行的数据存储到dataRow中的每个元素中

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

4. 使用foreach遍历文件中的每行数据,再定义一个字符串数组data,将每一个数据存储到data中的每个元素中。使用if语句判断每行的第一个元素是否为“#”,如果是则跳过这行

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

5. 将导入的数据存储到对应变量中,创建卡牌对象,并添加到allCards链表中

        使用Debug.Log语句在控制台打印数据

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

6. 在游戏开始时调用loadCardData方法

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游戏物体

1. 创建Card Store游戏物体存储卡牌数据

2. 在Card Store游戏物体上添加CardStore脚本

3. 将Card List.csv文件挂载到CardStore脚本上

4. 点击运行,控制台的输出如下图所示:

        本章完。感谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/386089.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt 如何制作动态库插件

首先 首先第一点要确定我们的接口是固定的&#xff0c;也就是要确定 #ifndef RTSPPLUGIN_H #define RTSPPLUGIN_H #include "rtspplugin_global.h" typedef void (*func_callback)(uint8_t* data,int len,uint32_t ssrc,uint32_t ts,const char* ipfrom,uint16_t f…

【Maven学习】-3.进阶

文章目录 3. 进阶3.1 maven依赖传递特性 3.2 依赖冲突3.2.1 自动选择原则3.2.2 手动排除 3.3 聚合工程3.3.1 继承介绍继承作用继承语法父工程依赖统一管理-dependencyManagement 3.3.2 工程聚合关系简介聚合作用聚合作用 3.4 私服3.4.1 简介3.4.2 Nexus下载安装Nexus3Nexus2 3.…

带你学会Git必会操作

文章目录 带你学会Git必会操作1Git的安装2.Git基本操作2.1本地仓库的创建2.2配置本地仓库 3.认识一些Git的基本概念3.1操作流程&#xff1a; 4.一些使用场景4.1添加文件场景一4.2查看git文件4.3修改文件4.4Git版本回退4.5git撤销修改 5.分支管理5.1查看分支5.2创建本地分支5.3切…

IOS-05 Swift循环控制语句

在 Swift 编程语言中&#xff0c;控制语句用于决定程序的执行流程&#xff0c;使我们能够根据不同的条件和情况来控制代码的执行顺序。下面我们将详细介绍几种常见的控制语句 一、for 循环 let names ["zhangsan","lisi"] for name in names{print(name…

set,map(java)

前言&#xff1a;要了解set和map&#xff0c;首先需要对搜索树和哈希有一定的了解&#xff0c;才能进一步深入的了解set和map。 1.搜索树 &#xff08;1&#xff09;性质&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有节点值都小于根节点的值。 若它的右子树不…

TypeScript学习篇-类型介绍使用、ts相关面试题

文章目录 基础知识基础类型: number, string, boolean, object, array, undefined, void(代表该函数没有返回值)unknownenum(枚举): 定义一个可枚举的对象联合类型: | (联合类型一次只能一种类型&#xff1b;而交叉类型每次都是多个类型的合并类型。)交叉类型: & (联合类型…

按图搜索新体验:阿里巴巴拍立淘API返回值详解

阿里巴巴拍立淘API是一项基于图片搜索的商品搜索服务&#xff0c;它允许用户通过上传商品图片&#xff0c;系统自动识别图片中的商品信息&#xff0c;并返回与之相关的搜索结果。以下是对阿里巴巴拍立淘API返回值的详细解析&#xff1a; 一、主要返回值内容 商品信息 商品列表…

【算法/学习】前缀和差分

前缀和&&差分目录 1. 前缀和的概念及作用 &#x1f308;概念 &#x1f308;用途 &#x1f319;一维前缀和 &#x1f319;二维前缀和 2. 差分的概念及用途 &#x1f308;概念&#xff1a; &#x1f308;用途 &#x1f319;一维差分 &#x1f319;二维差分 1. …

Linux系统编程——线程池

目录 一&#xff0c;池化技术 二&#xff0c;线程池概念 三&#xff0c;线程池实现 3.1 线程封装 3.2 预备头文件实现 3.3 线程池类的简单实现 3.4 主函数实现 3.5 效果展示 一&#xff0c;池化技术 池化技术是计算机编程领域非常常用的一种技术&#xff0c;该技术可以…

【前端/js】使用js读取本地文件(xml、二进制)内容

目录 说在前面FileReaderDOMParser文本文件二进制文件 说在前面 浏览器版本&#xff1a;Microsoft Edge 126.0.2 (正式版本) (64 位) FileReader MDNFileReader 接口允许 Web 应用程序异步读取存储在用户计算机上的文件&#xff08;或原始数据缓冲区&#xff09;的内容&#x…

CL4056D 1A锂离子电池线性充电器芯片IC

一般描述 CL4056D是一款ESOP8封装的独立线性锂离子电池充电器。由于外部元件较少&#xff0c;因此CL4056D非常适合用于各种便携式应用。充电电流可以通过外部电阻器进行编程。在待机模式下&#xff0c;供电电流将降低到约35uA。当输入电压断开时&#xff0c;CL4056 D将进…

UWA Gears正式上线,助力移动平台性能优化

亲爱的开发者朋友们&#xff0c; 我们非常激动地向大家宣布&#xff0c;UWA最新的无SDK性能分析工具 - UWA Gears&#xff0c;现已正式发布&#xff01;无论您使用的是哪种开发引擎&#xff0c;这款工具都能轻松应对&#xff0c;为您的项目保驾护航。更令人心动的是&#xff0c…

Lua编程

文章目录 概述lua数据类型元表注意 闭包表现 实现 lua/c 接口编程skynet中调用层次虚拟栈C闭包注册表userdatalightuserdata 小结 概述 这次是skynet&#xff0c;需要一些lua/c相关的。写一篇博客&#xff0c;记录下。希望有所收获。 lua数据类型 boolean , number , string…

在react中如何计算本地存储体积

1.定义useLocalStorageSize钩子函数 // 计算localStorage大小 function useLocalStorageSize() {const [size, setSize] useState(0);useEffect(() > {const calculateSize () > {let totalSize 0;for (let key in localStorage) {//过滤掉继承自原型链的属性if (loc…

Redis是多线程还是单线程?

文章目录 1、用户态和内核态2、阻塞IO3、非阻塞IO4、IO多路复用4.1 select4.2 poll4.3 epoll4.4 epoll中的ET和LT4.5 epoll的服务端流程 5、信号驱动6、异步IO7、对比8、Redis是单线程的吗&#xff1f;9、单线程多线程网络模型变更 1、用户态和内核态 1、ubuntu和Centos 都是Li…

基于PaddleClas的人物年龄分类项目

目录 一、任务概述 二、算法研发 2.1 下载数据集 2.2 数据集预处理 2.3 安装PaddleClas套件 2.4 算法训练 2.5 静态图导出 2.6 静态图推理 三、小结 一、任务概述 最近遇到个需求&#xff0c;需要将图像中的人物区分为成人和小孩&#xff0c;这是一个典型的二分类问题…

Python | Leetcode Python题解之第283题移动零

题目&#xff1a; 题解&#xff1a; class Solution:def moveZeroes(self, nums: List[int]) -> None:n len(nums)left right 0while right < n:if nums[right] ! 0:nums[left], nums[right] nums[right], nums[left]left 1right 1

ClickHouse 进阶【建表、查询优化】

1、ClickHouse 进阶 因为上一节部署了集群模式&#xff0c;所以需要启动 Zookeeper 和 ck 集群&#xff1b; 1.1、Explain 基本语法 EXPLAIN [AST | SYNTAX | PLAN | PIPELINE] [setting value, ...] SELECT ... [FORMAT ...] AST&#xff1a;用于查看语法树SYNTAX&#…

橙单后端项目下载编译遇到的问题与解决

今天下载orange-admin项目&#xff0c;不过下载下来运行出现一些问题。 1、涉及到XMLStreamException的几个类都出现下面的错误 The package javax.xml.stream is accessible from more than one module: <unnamed>, java.xml ctrl-shift-t 可以找到这个引入是哪些包里…

成为git砖家(5): 理解 HEAD

文章目录 1. git rev-parse 命令2. 什么是 HEAD2.1 创建分支当并未切换&#xff0c; HEAD 不变2.2 切换分支&#xff0c;HEAD 改变2.3 再次切换分支&#xff0c; HEAD 再次改变 3. detached HEAD4. HEAD 表示分支、表示 detached HEAD 有什么区别&#xff1f;区别相同点 5. HEA…