当前位置: 首页 > news >正文

【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. 点击运行,控制台的输出如下图所示:

        本章完。感谢阅读!

相关文章:

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

一、创建csv文件 1. 打开Excel&#xff0c;创建xlsx格式文件 2. 编辑卡牌数据&#xff1a;这里共写了两类卡牌&#xff0c;第一类是灵物卡&#xff0c;具有编号、卡名、生命、攻击四个属性&#xff1b;第二类是法术卡&#xff0c;具有编号、卡名、效果三个属性。每类卡的第一…...

美团测开面经整理大汇总!!

大厂测开面经&#xff0c;加油加油&#xff0c;一周看一篇 美团测开面经美团测开暑期实习面经第二弹美团-地图服务部测开一面面经&#xff08;70min&#xff09;美团-优选事业部测开一面面经美团-优选事业部测开二面面经&#xff08;82min&#xff09;美团第一次测开笔试美团测…...

微信公众号获取用户openid(PHP版,snsapi_base模式)

微信公众号获取用户openid的接口有2个&#xff1a;snsapi_base、snsapi_userinfo 详情见微信公众号开发文档&#xff1a;https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 本文介绍用PHP方式调用snsapi_base接口获取微信用户…...

DuckDB核心模块揭秘 | 第1期 | 向量化执行引擎之Pipeline

DuckDB核心模块揭秘 | 第1期 | 向量化执行引擎之Pipeline DuckDB是一款非常火的OLAP嵌入式数据库&#xff0c;性能超级棒。它分为多个组件&#xff1a;解析器、逻辑规划器、优化器、物理规划器、执行器以及事务和存储管理层。其中解析器原语PgSQL的解析器&#xff1b;逻辑规划器…...

Vue如何让用户通过a链接点击下载一个excel文档

在Vue中&#xff0c;通过<a>标签让用户点击下载Excel文档&#xff0c;通常需要确保服务器支持直接下载该文件&#xff0c;并且你有一个可以直接访问该文件的URL。以下是一些步骤和示例&#xff0c;展示如何在Vue应用中实现这一功能。 1. 服务器端支持 首先&#xff0c;…...

美摄科技企业级视频拍摄与编辑SDK解决方案

在数字化浪潮汹涌的今天&#xff0c;视频已成为企业传递信息、塑造品牌、连接用户不可或缺的强大媒介。为了帮助企业轻松驾驭这一视觉盛宴的制作过程&#xff0c;美摄科技凭借其在影视级非编技术领域的深厚积累&#xff0c;推出了面向企业的专业视频拍摄与编辑SDK解决方案&…...

MySQL:增删改查、临时表、授权相关示例

目录 概念 数据完整性 主键 数据类型 精确数字 近似数字 字符串 二进制字符串 日期和时间 MySQL常用语句示例 SQL结构化查询语言 显示所有数据库 显示所有表 查看指定表的结构 查询指定表的所有列 创建一个数据库 创建表和列 插入数据记录 查询数据记录 修…...

初识git工具~~上传代码到gitee仓库的方法

目录 1.背景~~其安装 2.gitee介绍 2.1新建仓库 2.2进行相关配置 3.拉取仓库 4.服务器操作 4.1克隆操作 4.2查看本地仓库 4.3代码拖到本地仓库 4.4关于git三板斧介绍 4.4.1add操作 4.4.2commit操作 4.4.3push操作 5.一些其他说明 5.1.ignore说明 5.2git log命令 …...

Redis知识点总价

1 redis的数据结构 2 redis的线程模型 1&#xff09; Redis 采用单线程为什么还这么快 之所以 Redis 采用单线程&#xff08;网络 I/O 和执行命令&#xff09;那么快&#xff0c;有如下几个原因&#xff1a; Redis 的大部分操作都在内存中完成&#xff0c;并且采用了高效的…...

大语言模型-GPT-Generative Pre-Training

一、背景信息&#xff1a; GPT是2018 年 6 月由OpenAI 提出的预训练语言模型。 GPT可以应用于复杂的NLP任务中&#xff0c;例如文章生成&#xff0c;代码生成&#xff0c;机器翻译&#xff0c;问答对话等。 GPT也采用两阶段的训练过程&#xff0c;第一阶段是无监督的方式来预训…...

mybatis批量插入、mybatis-plus批量插入、mybatis实现insertList、mybatis自定义实现批量插入

文章目录 一、mybatis新增批量插入1.1、引入依赖1.2、自定义通用批量插入Mapper1.3、把通用方法注册到mybatisplus注入器中1.4、实现InsertList类1.5、需要批量插入的dao层继承批量插入Mapper 二、可能遇到的问题2.1、Invalid bound statement 众所周知&#xff0c;mybatisplus…...

Springboot项目的行为验证码AJ-Captcha(源码解读)

目录 前言1. 复用验证码2. 源码解读2.1 先走DefaultCaptchaServiceImpl类2.2 核心ClickWordCaptchaServiceImpl类 3. 具体使用 前言 对于Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目…...

【初阶数据结构篇】时间(空间)复杂度

文章目录 算法复杂度时间复杂度1. 定义2. 表示方法3. 常见时间复杂度4.案例计算分析冒泡排序二分查找斐波那契数列&#xff08;递归法&#xff09;斐波那契数列&#xff08;迭代法&#xff09; 空间复杂度案例分析冒泡排序斐波那契数列&#xff08;递归法&#xff09;斐波那契数…...

C# 设计模式分类

栏目总目录 1. 创建型模式&#xff08;Creational Patterns&#xff09; 创建型模式主要关注对象的创建过程&#xff0c;包括如何实例化对象&#xff0c;并隐藏实例化的细节。 单例模式&#xff08;Singleton&#xff09;&#xff1a;确保一个类只有一个实例&#xff0c;并提…...

前端模块化CommonJS、AMD、CMD、ES6

在前端开发中&#xff0c;模块化是一种重要的代码组织方式&#xff0c;它有助于将复杂的代码拆分成可管理的小块&#xff0c;提高代码的可维护性和可重用性。CommonJS、AMD&#xff08;异步模块定义&#xff09;和CMD&#xff08;通用模块定义&#xff09;是三种不同的模块规范…...

论文阅读:(DETR)End-to-End Object Detection with Transformers

论文阅读&#xff1a;&#xff08;DETR&#xff09;End-to-End Object Detection with Transformers 参考解读&#xff1a; 论文翻译&#xff1a;End-to-End Object Detection with Transformers&#xff08;DETR&#xff09;[已完结] - 怪盗kid的文章 - 知乎 指示函数&…...

react中路由跳转以及路由传参

一、路由跳转 1.安装插件 npm install react-router-dom 2.路由配置 路由配置&#xff1a;react中简单的配置路由-CSDN博客 3.实现代码 // src/page/index/index.js// 引入 import { Link, useNavigate } from "react-router-dom";function IndexPage() {const …...

C++ STL set_symmetric_difference

一&#xff1a;功能 给定两个集合A&#xff0c;B&#xff1b;求出两个集合的对称差&#xff08;只属于其中一个集合&#xff0c;而不属于另一个集合的元素&#xff09;&#xff0c;即去除那些同时在A&#xff0c;B中出现的元素。 二&#xff1a;用法 #include <vector>…...

postman请求响应加解密

部分接口&#xff0c;需要请求加密后&#xff0c;在发动到后端。同时后端返回的响应内容&#xff0c;也是经过了加密。此时&#xff0c;我们先和开发获取到对应的【密钥】&#xff0c;然后在postman的预执行、后执行加入js脚本对明文请求进行加密&#xff0c;然后在发送请求&am…...

数据集,批量更新分类数值OR批量删除分类行数据

数据集批量更新分类OR删除分类行数据 import osdef remove_class_from_file(file_path, class_to_remove):"""从YOLO格式的标注文件中删除指定类别的行记录&#xff0c;并去除空行。:param file_path: YOLO标注文件路径:param class_to_remove: 需要删除的类别…...

从编码到网络:GLM模型在图论分析中的实战指南

1. GLM模型与图论分析的完美结合 第一次接触GLM模型是在分析脑网络数据时&#xff0c;当时手头有一批健康人和患者的脑功能连接数据&#xff0c;需要找出两组间的差异。传统方法只能逐个节点比较&#xff0c;效率低下且容易漏掉整体网络特征。直到发现GLM模型可以完美融入图论分…...

API数据与自建数据库同步:CDC+ETL的实时数据管道

在电商、跨境业务、微服务架构等实际业务场景中&#xff0c;系统普遍面临多平台 API 数据源杂乱、自建数据库数据滞后、手工同步易出错、批量离线同步时效性差等痛点。第三方平台开放 API、业务系统接口、供应链数据接口源源不断产生增量数据&#xff0c;而企业自建 MySQL、Pos…...

如何一键获取Zotero文献引用数据?终极引用统计插件完整指南

如何一键获取Zotero文献引用数据&#xff1f;终极引用统计插件完整指南 【免费下载链接】zotero-citationcounts Zotero plugin for auto-fetching citation counts from various sources 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-citationcounts 如果你是一…...

Claude API代理服务部署与定制:从零构建企业级AI网关

1. 项目概述与核心价值最近在折腾AI应用开发&#xff0c;特别是想把Claude的API能力整合到自己的项目里&#xff0c;发现直接调用官方API虽然稳定&#xff0c;但在一些特定场景下&#xff0c;比如需要统一接口管理、增加自定义逻辑层&#xff0c;或者想对请求/响应做些“手脚”…...

基于Docker Compose的容器化配置管理:从基础设施即代码到可观测性实践

1. 项目概述&#xff1a;一个为“懒人”准备的容器化配置管理工具如果你和我一样&#xff0c;经常需要部署和维护各种基于容器的服务&#xff0c;比如家庭媒体服务器、个人开发环境&#xff0c;或者是一些小型项目的后端&#xff0c;那你一定对重复的配置工作深恶痛绝。每次新开…...

辐射4正式版.144G终极整合!含实验室355个绅士MOD.2026最新版免费下载(看到请立即转存 资源随时失效)pc手机通用

下载链接 在淘宝买160元 在游戏界&#xff0c;如果要选出一个“因玩家的无限创造力而获得第二次生命”的典范&#xff0c;Bethesda&#xff08;B社&#xff09;旗下的《辐射4》&#xff08;Fallout 4&#xff09;绝对名列前茅。尤其是被社区戏称…...

如何利用OR-Tools优化出版业:印刷调度与分销路线的完整指南

如何利用OR-Tools优化出版业&#xff1a;印刷调度与分销路线的完整指南 【免费下载链接】or-tools Googles Operations Research tools: 项目地址: https://gitcode.com/gh_mirrors/or/or-tools OR-Tools是Google开发的强大开源运筹学工具库&#xff0c;能够帮助出版企业…...

【ROS2速成 - Day2】ROS2五大核心概念吃透(嵌入式类比记忆,超好懂)

前言 大家好&#xff0c;我是深耕嵌入式 15 年的老林。上一篇 Day1 我们搭好了 ROS2 的开发环境&#xff0c;很多同学私信我说&#xff0c;ROS2 的概念太多了&#xff0c;什么节点、话题、服务&#xff0c;听着就头大&#xff0c;完全不知道和我们平时写单片机代码有什么关系。…...

如何用数据思维玩转星穹铁道:3步掌握抽卡概率的科学分析法

如何用数据思维玩转星穹铁道&#xff1a;3步掌握抽卡概率的科学分析法 【免费下载链接】star-rail-warp-export Honkai: Star Rail Warp History Exporter 项目地址: https://gitcode.com/gh_mirrors/st/star-rail-warp-export 还在为星穹铁道的抽卡结果感到迷茫吗&…...

别再死记硬背了!用‘词根家族记忆法’搞定英语单词(以pland/plen/ply等为例)

词根家族记忆法&#xff1a;用故事和逻辑征服英语词汇 背单词这件事&#xff0c;对大多数英语学习者来说就像一场永无止境的马拉松。我们捧着厚厚的词汇书&#xff0c;机械地重复着"abandon-放弃、abandon-放弃"&#xff0c;结果第二天翻开书&#xff0c;发现记忆又回…...