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

news2025/2/22 23:50:38

一、创建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.coloradmin.cn/o/1954436.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用在UE5中使用AirSim插件Eigen库头文件引用报错,出现报错的解决方式

一、概述 如图所示&#xff0c;用红线圈出的两条头文件引用会报错&#xff0c;提示无法找到他们&#xff0c;但是可以发现的是&#xff0c;他们的路径书写是没有问题的。 // #include <Source/Airlib/deps/eigen3/Eigen/Core> // #include <Source/Airlib/deps/eigen…

追问试面试系列:开篇

我们不管做任何事情&#xff0c;都是需要个理由&#xff0c;而不是盲目去做。 为什么写这个专栏&#xff1f; 就像我们被面试八股文时&#xff0c;市面上有很多面试八股文&#xff0c;随便一个八股文都是500&#xff0c;甚至1000面试题。诸多面试题&#xff0c;难道我们需要一…

【系统架构设计师】十八、信息系统架构设计理论与实践①

目录 一、信息系统架构概述 二、信息系统架构风格与分类 2.1 信息系统架构风格 2.2 信息系统架构分类 三、信息系统架构模型 3.1 单体应用 3.2 客户机/服务器 3.2.1 二层 C/S 3.2.2 三层 C/S 和 B/S 3.2.3 多层 C/S 和 B/S 3.2.4 MVC 3.3 面向服务架构(SOA)模式 …

PVE环境中调整虚拟机磁盘大小

我的希望将PVE中的虚拟机磁盘调整一下&#xff0c;增加20GB。在查询了一些资料后&#xff0c;做一下总结教程。 环境是 PVE8.2.2 版本&#xff0c;虚拟机系统是centos7.9.2009-minimal&#xff0c; 安装系统时划分磁盘分区方式是默认分区方式&#xff08;不同分区方式下&#…

RISC-V (二)汇编语言编程

简介 汇编语言是一种“低级”语言。 汇编语言的缺点&#xff1a; -难度 -难写 -难移植 汇编语言的优点&#xff1a; -灵活 -强大 汇编语言的应用场景 -需要直接访问底层硬件的地方 -需要对性能执行极致优化的地方 汇编语言语法介绍&#xff08;GNU版本&#xff09; 基本组成 …

《python程序语言设计》第6章15题财务应用程序:打印税款表。利用程序清单4-7的代码

6.15 打印税款表 def computeTax(status_n, income):tax 0if status_n 0:if income < 8350:tax income * 0.10elif income < 33950:tax 8350 * 0.10 (income - 8350) * 0.15elif income < 82250:tax 8350 * 0.10 (33950 - 8350) * 0.15 (income - 33950) * 0.…

Docker 制作java8镜像

一、在Linux服务器安装Docker 可参考&#xff1a;Linux安装Docker-CSDN博客 二、使用Dokcer制作java8镜像 2.1 上传jdk8的压缩包 mkdir -p /home/data/develop/jdk cd /home/data/develop/jdk 在该路径下上传jdk-8u261-linux-x64.tar.gz包 如下图&#xff1a; 2.2 编写Docke…

HALCON如何创建本地函数

HALCON中有本地函数(.hdev)、外部函数(HDevelop函数文件.hdvp)和库函数(.hdpl) 本地函数(.hdev)&#xff1a;创建后仅在当前程序文件中使用&#xff1b; 外部函数(HDevelop函数文件.hdvp)&#xff1a;创建后可以在其他程序文件中复用&#xff0c;默认保存在…/ procedures/下…

【React】详解 Redux 状态管理

文章目录 一、Redux 的基本概念1. 什么是 Redux&#xff1f;2. Redux 的三大原则 二、Redux 的核心组件1. Store2. Action3. Reducer 三、Redux 的使用流程1. 安装 Redux 及其 React 绑定2. 创建 Action3. 创建 Reducer4. 创建 Store5. 在 React 应用中使用 Store6. 连接 React…

【Java算法专场】二分查找(下)

目录 山脉数组的峰顶索引 算法分析 算法步骤 算法代码 算法示例 寻找峰值 算法分析 算法步骤 算法代码 算法示例 寻找旋转排序数组中的最小值 算法分析 算法步骤 算法代码 算法示例 点名 算法分析 算法步骤 算法代码 算法示例 山脉数组的峰顶索引 …

生鲜云订单零售系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商品分类管理&#xff0c;商品信息管理&#xff0c;订单评价管理&#xff0c;订单管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;商品信息&#…

DDOS攻击学习 - kali初学

文章目录 本地ssh配置nmap(网络连接的工具)nmap -sP IP地址nmap -p 1-65535 -A IP地址主机发现Ping扫描端口扫描时序扫描常用扫描方式指纹识别与探测全端口版本探测防火墙/IDS逃逸报文分段信息收集IP信息收集WHOIS查询数据库渗透测试MySQL列举数据库列举MySQL变量发起请求目录扫…

暑假第一周——网易云音乐仿写

iOS学习 前言发现&#xff1a;控件的堆叠我的&#xff1a;更换头像账号&#xff1a;切换夜间总结 前言 本周正式开始暑期学习&#xff0c;完成了网易云音乐的仿写。 发现&#xff1a;控件的堆叠 发现页面由一个无限轮播图&#xff0c;四个自定义cell完成。无限轮播图在之前已经…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十九章 等待队列

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

css 作业 2

文章目录 前言第四题第五题第六题第七题第八题第九题第十题&#xff08;子标签&#xff09; 前言 昨天写了前面三次作业&#xff0c;今天把剩下的七个作业写完 第四题 http://127.0.0.1:5500/index1.html&#xff0c;就用这个网址查看代码在网页的展示效果 代码评测过不了&…

【C语言】文件操作,文件读写详细介绍

目录 为什么要使用文件&#xff1f; 文件概念 1. 什么是文件&#xff1f; 2. 程序文件 3. 数据文件 4. 文件名 文件的使用 1. 文件指针 2. 文件的打开与关闭 文件的顺序读写 1. 顺序读写函数 2. scanf系列与printf系列 文件的随机读写 1. fseek 2. ftell 3. …

【C++】实验三

题目&#xff1a; 1、如何使用C来找出编码88表示的字符&#xff1f;指出至少两种方法。 思路&#xff1a;方法一定义一个字符型变量直接等于88&#xff0c;将其输出结果为编码88表示的字符&#xff1b;方法二使用整形变量来存储88&#xff0c;输出时将其强制转换成字符型。 …

GD32 MCU如何将烧录口配置为GPIO使用?

如果大家在进行GD32 MCU开发时发现GPIO引脚使用不足&#xff0c;可以尝试将烧录口配置为GPIO使用&#xff0c;这样就可以多出几个引脚使用&#xff0c;但使用的时候如何配置以及有哪些注意事项&#xff0c;本视频将会为大家进行解答。 GD32 MCU存在两种GPIO备用功能的配置&…

数字陷波器的设计和仿真(Matlab+C)

目录 一、数字陷波器的模型 二、Matlab仿真 1. 示例1 2. 示例2 三、C语言仿真 1. 由系统函数计算差分方程 2. 示例代码 一、数字陷波器的模型 二、Matlab仿真 1. 示例1 clear clc f0=100;%滤掉的100Hz fs=1000;%大于两倍的信号最高频率 r=0.9; w0=2*pi*f0/fs;%转换到…

【深度学习】语音合成,TTS,fish-speech

官方项目地址&#xff1a;https://github.com/fishaudio/fish-speech git clone https://github.com/fishaudio/fish-speech.gitdocker run -it --gpus device3 -v /ssd/xiedong/tts:/ssd/xiedong/tts --net host --shm-size 16G kevinchina/deeplearning:pytorch2.3.0-cuda12.…