【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,创建xlsx格式文件 2. 编辑卡牌数据:这里共写了两类卡牌,第一类是灵物卡,具有编号、卡名、生命、攻击四个属性;第二类是法术卡,具有编号、卡名、效果三个属性。每类卡的第一…...
美团测开面经整理大汇总!!
大厂测开面经,加油加油,一周看一篇 美团测开面经美团测开暑期实习面经第二弹美团-地图服务部测开一面面经(70min)美团-优选事业部测开一面面经美团-优选事业部测开二面面经(82min)美团第一次测开笔试美团测…...
微信公众号获取用户openid(PHP版,snsapi_base模式)
微信公众号获取用户openid的接口有2个:snsapi_base、snsapi_userinfo 详情见微信公众号开发文档: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嵌入式数据库,性能超级棒。它分为多个组件:解析器、逻辑规划器、优化器、物理规划器、执行器以及事务和存储管理层。其中解析器原语PgSQL的解析器;逻辑规划器…...
Vue如何让用户通过a链接点击下载一个excel文档
在Vue中,通过<a>标签让用户点击下载Excel文档,通常需要确保服务器支持直接下载该文件,并且你有一个可以直接访问该文件的URL。以下是一些步骤和示例,展示如何在Vue应用中实现这一功能。 1. 服务器端支持 首先,…...
美摄科技企业级视频拍摄与编辑SDK解决方案
在数字化浪潮汹涌的今天,视频已成为企业传递信息、塑造品牌、连接用户不可或缺的强大媒介。为了帮助企业轻松驾驭这一视觉盛宴的制作过程,美摄科技凭借其在影视级非编技术领域的深厚积累,推出了面向企业的专业视频拍摄与编辑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) Redis 采用单线程为什么还这么快 之所以 Redis 采用单线程(网络 I/O 和执行命令)那么快,有如下几个原因: Redis 的大部分操作都在内存中完成,并且采用了高效的…...
大语言模型-GPT-Generative Pre-Training
一、背景信息: GPT是2018 年 6 月由OpenAI 提出的预训练语言模型。 GPT可以应用于复杂的NLP任务中,例如文章生成,代码生成,机器翻译,问答对话等。 GPT也采用两阶段的训练过程,第一阶段是无监督的方式来预训…...
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 众所周知,mybatisplus…...
Springboot项目的行为验证码AJ-Captcha(源码解读)
目录 前言1. 复用验证码2. 源码解读2.1 先走DefaultCaptchaServiceImpl类2.2 核心ClickWordCaptchaServiceImpl类 3. 具体使用 前言 对于Java的基本知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目…...
【初阶数据结构篇】时间(空间)复杂度
文章目录 算法复杂度时间复杂度1. 定义2. 表示方法3. 常见时间复杂度4.案例计算分析冒泡排序二分查找斐波那契数列(递归法)斐波那契数列(迭代法) 空间复杂度案例分析冒泡排序斐波那契数列(递归法)斐波那契数…...
C# 设计模式分类
栏目总目录 1. 创建型模式(Creational Patterns) 创建型模式主要关注对象的创建过程,包括如何实例化对象,并隐藏实例化的细节。 单例模式(Singleton):确保一个类只有一个实例,并提…...
前端模块化CommonJS、AMD、CMD、ES6
在前端开发中,模块化是一种重要的代码组织方式,它有助于将复杂的代码拆分成可管理的小块,提高代码的可维护性和可重用性。CommonJS、AMD(异步模块定义)和CMD(通用模块定义)是三种不同的模块规范…...
论文阅读:(DETR)End-to-End Object Detection with Transformers
论文阅读:(DETR)End-to-End Object Detection with Transformers 参考解读: 论文翻译:End-to-End Object Detection with Transformers(DETR)[已完结] - 怪盗kid的文章 - 知乎 指示函数&…...
react中路由跳转以及路由传参
一、路由跳转 1.安装插件 npm install react-router-dom 2.路由配置 路由配置:react中简单的配置路由-CSDN博客 3.实现代码 // src/page/index/index.js// 引入 import { Link, useNavigate } from "react-router-dom";function IndexPage() {const …...
C++ STL set_symmetric_difference
一:功能 给定两个集合A,B;求出两个集合的对称差(只属于其中一个集合,而不属于另一个集合的元素),即去除那些同时在A,B中出现的元素。 二:用法 #include <vector>…...
postman请求响应加解密
部分接口,需要请求加密后,在发动到后端。同时后端返回的响应内容,也是经过了加密。此时,我们先和开发获取到对应的【密钥】,然后在postman的预执行、后执行加入js脚本对明文请求进行加密,然后在发送请求&am…...
数据集,批量更新分类数值OR批量删除分类行数据
数据集批量更新分类OR删除分类行数据 import osdef remove_class_from_file(file_path, class_to_remove):"""从YOLO格式的标注文件中删除指定类别的行记录,并去除空行。:param file_path: YOLO标注文件路径:param class_to_remove: 需要删除的类别…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
