2025-01-04 Unity插件 YodaSheet2 —— 基础用法

news2025/1/8 23:06:23

文章目录

  • 环境配置
  • 1 创建 YadeSheetData
  • 2 读取方式
    • 2.1 表格读取
    • 2.2 列表读取
  • 3 自定义设置
    • 3.1 修改代码生成位置
    • 3.2 添加列表支持
      • 3.2.1 修改 DataTypeMapper.cs
      • 3.2.2 修改 SheetDataExtensions.cs
      • 3.2.3 修改 CodeGeneratorEditor.cs
      • 3.2.4 测试

​ 官方文档: Unity 亚德表 — Yade Sheet for Unity。

​ 本文介绍基本使用方法与部分心得。

环境配置

  • Unity 版本:6000.0.26f1c1
  • YadeSheet 版本:1.5.5

1 创建 YadeSheetData

  1. 在 Project 窗口中右键单击并选择 创建 -> Yade Sheet 菜单以创建 yade 工作表文件,将其命名为 TestSheet 。
image-20250104014033855
  1. 双击 TestSheet 文件开始编辑,例如:
image-20250104014156449

2 读取方式

2.1 表格读取

  1. 创建名为 Test.cs 的 MonoBehaviour 脚本,声明 public 的 YadeSheetData 字段 sheet,在 Start 函数中打印表格中的内容。
using UnityEngine;
using Yade.Runtime;

public class Test : MonoBehaviour
{
    public YadeSheetData Sheet;

    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
        // 读取第 0 行第 0 列的 Cell
        Debug.Log(Sheet.GetCell(0, 0).GetValue()); // Result: "Hello"
        
        // 读取 B1 Cell
        Debug.Log(Sheet.GetCell("B1").GetValue()); // Result: "Samples"
    }

    // Update is called once per frame
    void Update()
    { }
}
  1. 在场景中创建空物体 Test 并挂载 Test.cs 脚本,关联 TestSheet,运行后即可得到输出结果。
image-20250104014736520 image-20250104014902125

2.2 列表读取

​ 这种读取方式将表格中的每一行看做一个 Item,整个表格即为 List<Item>

image-20250104015627556
  1. 创建 Item 的 C# 数据结构。

    依次点击 “1” -> “2”,创建 Item 的字段。

    • Index:要设置的列。
    • Alias:简短描述。
    • Field:用于内置代码生成器生成类的 Field 名,只能输入只能与数字、字母和_组合的单词,不能以数字开头
    • Type:用于内置代码生成器生成类中字段的类型。
image-20250104015935431
  1. 在标题区右键,可选择显示 Type、Field、Alias。
image-20250104020437395
  1. 依次点击 “1” -> “2”,输入要生成的 C# 代码名,下方有预览。
image-20250104020602740
  1. 点击生成,默认生成在 “Asset” -> “Yade” -> “CodeGen” 目录下。

    [DataField(0)] 特性表示 Name 对应第 0 列的数据。

image-20250104021054949
using System;
using Yade.Runtime;

public class Data
{
	/// <summary>
	/// 字符串1
	/// </summary>
	[DataField(0)] public String Name;

	/// <summary>
	/// 字符串2
	/// </summary>
	[DataField(1)] public String Content;

	[DataField(2)] public String _C;
	[DataField(3)] public String _D;
	[DataField(4)] public String _E;
	[DataField(5)] public String _F;
	[DataField(6)] public String _G;
}


// Generated by Yade (http://u3d.as/1VtP)
  1. 接下来,即可将 TestSheet 转换为 List 进行读取:
using UnityEngine;
using Yade.Runtime;

public class Test : MonoBehaviour
{
    public YadeSheetData Sheet;

    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
        List<Data> list = Sheet.AsList<Data>();
        
        Debug.Log(list[2].Name);    // Result: "Hello2"
        Debug.Log(list[3].Content); // Result: "Samples3"
    }

    // Update is called once per frame
    void Update()
    { }
}

3 自定义设置

3.1 修改代码生成位置

​ 依据路径 “Asset” -> “Yade” -> “Editor” -> “Components” -> “Common”,找到目录下的 “CodeGeneratorEditor.cs” 代码文件。

image-20250104021908624

​ 在第 286 行的 Create() 方法中修改默认生成路径。

image-20250104022058658

3.2 添加列表支持

​ 原生支持类型如下,可以看到,有许多不必要且不常用的类型(最后一行为自定义扩展类)。

image-20250104022323613

3.2.1 修改 DataTypeMapper.cs

​ 依据路径 “Asset” -> “Yade” -> “Runtime” -> “Common”,找到目录下的 “DataTypeMapper.cs” 代码文件。

image-20250104022746446

​ 第 66 行 ~ 91 行定义了支持的内置类型。

image-20250104022943614

​ 许多不常用,我们修改如下(注意保持排序):

image-20250104023116634

3.2.2 修改 SheetDataExtensions.cs

​ 依据路径 “Asset” -> “Yade” -> “Runtime” -> “Extensions”,找到目录下的 “SheetDataExtensions.cs” 代码文件。

image-20250104023330236

​ 第 65 行 ~ 80 行给出了对应类型的转换器 Parser。

image-20250104023432092

​ 同样,修改如下。

image-20250104023549109

​ 同时,创建对应的转换方法即可。这里我使用 “|” 分隔元素。

private static List<string> ListStringParse(string arg)
{
    var list = new List<string>();
    var strs = arg.Split('|');
    foreach (var str in strs)
    {
        list.Add(str.TrimStart().TrimEnd());
    }
    return list;
}

private static List<float> ListFloatParse(string arg)
{
    var list = new List<float>();
    var strs = arg.Split('|');
    foreach (var str in strs)
    {
        list.Add(Convert.ToSingle(str.TrimStart().TrimEnd()));
    }
    return list;
}

private static List<int> ListIntParse(string arg)
{
    var list = new List<int>();
    var strs = arg.Split('|');
    foreach (var str in strs)
    {
        list.Add(Convert.ToInt32(str.TrimStart().TrimEnd()));
    }
    return list;
}

​ 回到编辑器页面,可以看到添加了 List 类型,同时删除了许多不常用的内置类型。

image-20250104023946013

​ 之后,将第 253 ~ 275 行注释,这段代码会捕获 List 类型,导致转换失败。注释后 List 类型会直接进入第 278 行的 else 块中,这段代码将正确处理 List 类型。

image-20250104031709884

3.2.3 修改 CodeGeneratorEditor.cs

​ 到此并没有结束,生成代码时,发现 List 类型不正确:

image-20250104024323493

​ 这和 CodeGen 有关,因此,我们回到 “Asset” -> “Yade” -> “Editor” -> “Components” -> “Common”,找到目录下的 “CodeGeneratorEditor.cs” 代码文件。在第 180 行 ~ 190 行的 GetCodeGenerated() 函数中,没有处理泛型类型的情况。

image-20250104025144698

​ 替换为如下代码,同时在 “CodeGeneratorEditor.cs” 中导入 System.Array 命名空间:

var typeString = type.ToString();
if (type.IsGenericType)
{
    // 获取类型的名称,不包括泛型参数的部分
    string baseName = type.GetGenericTypeDefinition().Name;

    // 去掉类型名称中的数字,例如 List`1 -> List
    baseName = baseName.Substring(0, baseName.IndexOf('`'));

    // 获取泛型参数的类型名称,并去掉其命名空间部分
    var    genericArgs    = type.GetGenericArguments();
    string genericArgsStr = "<" + string.Join(", ", Array.ConvertAll(genericArgs, t => t.Name)) + ">";

    typeString = baseName + genericArgsStr;
}
else if (typeString.Contains("+"))
{
    var temp = typeString.Split(new char[] { '+' }, System.StringSplitOptions.RemoveEmptyEntries);
    namespaces.AppendLine(string.Format("using static {0};", temp[0]));
    typeString = temp[1];
}
else if (typeString.StartsWith("System."))
{
    typeString = typeString.Substring(7);
}

​ 最后,还需要在第 156 行添加命名空间 “System.Collections.Generic” 的写入,以在生成代码中支持泛型类的使用。

image-20250104025826600

3.2.4 测试

​ 以如下表格为例,生成到 Data.cs 文件中。

image-20250104025521907

​ 打开 Data.cs 代码,没有报错。

image-20250104030018550

​ 重新修改 Test.cs 脚本,运行,成功读取 List。

using System.Collections.Generic;
using UnityEngine;
using Yade.Runtime;

public class Test : MonoBehaviour
{
    public YadeSheetData Sheet;

    public List<float> Content1;
    public List<float> Content2;
    public List<float> Content3;
    public List<float> Content4;

    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
        var list = Sheet.AsList<Data>();

        foreach (var data in list)
        {
            Debug.Log(data.Name);
        }
        
        Content1 = list[0].Content;
        Content2 = list[1].Content;
        Content3 = list[2].Content;
        Content4 = list[3].Content;
    }

    // Update is called once per frame
    void Update()
    { }
}
image-20250104032139815

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

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

相关文章

STM32 拓展 RTC(实时时钟)

RTC简介 RTC(Real Time Clock,实时时钟)。是一个掉电后仍然可以继续运行的独立定时器。 RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。 RTC实质…

微信小程序实现登录注册

文章目录 1. 官方文档教程2. 注册实现3. 登录实现4. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/路由跳转的几种方式&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.switchTab…

[大模型开源]SecGPT 网络安全大模型

模型介绍 SecGPT的愿景是将人工智能技术引入网络安全领域&#xff0c;以提高网络防御的效率和效果。其使命是推动网络安全智能化&#xff0c;为社会提供更安全的数字生活环境。 ① SecGPT开源地址&#xff1a;https://github.com/Clouditera/secgpt② 模型地址&#xff1a;htt…

解决“KEIL5软件模拟仿真无法打印浮点数”之问题

在没有外部硬件支持时&#xff0c;我们会使用KEIL5软件模拟仿真&#xff0c;这是是仿真必须要掌握的技巧。 1、点击“Project”&#xff0c;然后点击“Options for target 项目名字”&#xff0c;点击“Device”,选择CPU型号。 2、点击“OK” 3、点击“Target”,勾选“Use Mi…

C语言 扫雷程序设计

目录 1.main函数 2.菜单打印menu函数 3.游戏game函数 4.宏定义 5.界面初始化 6.打印界面 7.设置雷 8.统计排查坐标周围雷的个数 9.排查雷 10.总代码 test.c代码 game.h代码 game.c代码 结语&#xff1a; 一个简单的扫雷游戏&#xff0c;通过宏定义可以修改行列的…

Excel 技巧03 - 如何对齐小数位数? (★)如何去掉小数点?如何不四舍五入去掉小数点?

这几个有点儿关联&#xff0c;我都给放到一起了&#xff0c;不影响大家分别使用。 目录 1&#xff0c;如何对齐小数位数&#xff1f; 2&#xff0c;如何去掉小数点&#xff1f; 3&#xff0c;如何不四舍五入去掉小数点&#xff1f; 1&#xff0c;如何对齐小数位数&#xff…

【大模型+本地自建知识图谱/GraphRAG/neo4j/ollama+Qwen千问(或llama3)】 python实战(中)

一、建立基本的知识图谱并导入neo4j 这里我举例用的属性表、关系表&#xff0c;大概格式如下 id名字颜色a1苹果红色 startrelenda1属于b1 启动neo4j&#xff08;关于neo4j的安装此处不再赘述&#xff09; import pandas as pd from py2neo import Graph, Node, Relationship…

量子计算遇上人工智能:突破算力瓶颈的关键?

引言&#xff1a;量子计算遇上人工智能——突破算力瓶颈的关键&#xff1f; 在数字化时代的浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度改变着我们的生活&#xff0c;从语音助手到自动驾驶&#xff0c;从医学诊断到金融分析&#xff0c;无不彰显其…

jenkins入门12-- 权限管理

Jenkins的权限管理 由于jenkins默认的权限管理体系不支持用户组或角色的配置&#xff0c;因此需要安装第三发插件来支持角色的配置&#xff0c;我们使用Role-based Authorization Strategy 插件 只有项目读权限 只有某个项目执行权限

IWOA-GRU和GRU时间序列预测(改进的鲸鱼算法优化门控循环单元)

时序预测 | MATLAB实现IWOA-GRU和GRU时间序列预测(改进的鲸鱼算法优化门控循环单元) 目录 时序预测 | MATLAB实现IWOA-GRU和GRU时间序列预测(改进的鲸鱼算法优化门控循环单元)预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现IWOA-GRU和GRU时间序列预测…

分享3个国内使用正版GPT的网站【亲测有效!2025最新】

1. molica 传送入口&#xff1a;https://ai-to.cn/url/?umolica 2. 多帮AI 传送入口&#xff1a;https://aigc.openaicloud.cn?inVitecodeMYAAGGKXVK 3. 厉害猫 传送入口&#xff1a;https://ai-to.cn/url/?ulihaimao

Personal APP

1、Matlab 2023b https://www.bilibili.com/opus/887246540317392920 https://blog.csdn.net/qq_25719943/article/details/138096918 https://www.jokerdown.com/22886.html 2、 3、

Vue2:el-table中的文字根据内容改变颜色

想要实现的效果如图,【级别】和【P】列的颜色根据文字内容变化 1、正常创建表格 <template><el-table:data="tableData"style="width: 100%"><el-table-column prop="id" label="ID"/> <el-table-column …

ArmSoM RK3588/RK3576核心板,开发板网络设置

ArmSoM系列产品都搭配了以太网口或WIFI模块&#xff0c;PCIE转以太网模块、 USB转以太网模块等&#xff0c;这样我们的网络需求就不止是上网这么简单了&#xff0c;可以衍生出多种不同的玩法。 1. 网络连接​ 连接互联网或者组成局域网都需要满足一个前提–设备需要获取到ip&a…

动态规划六——两个数组的dp问题

目录 题目一——1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 题目二——1035. 不相交的线 - 力扣&#xff08;LeetCode&#xff09; 题目三——115. 不同的子序列 - 力扣&#xff08;LeetCode&#xff09; 题目四—— 44. 通配符匹配 - 力扣&#xff08;…

LQ quarter 5th

目录 B. 开赛主题曲 C. BlueAI E. 精准难度 B. 开赛主题曲 &#xff08;1&#xff09;两层循环枚举所有子串。第一层子串长度&#xff0c;第二层子串起点 &#xff08;2&#xff09;判子串是否合法还要一个 for&#xff0c;26 * 26 * 2e5 快要超时&#xff0c;因此计算每个字母…

Sam Altman发布博客,回顾OpenAI九年历程,直言目标已瞄准ASI超级人工智能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Python爬虫与1688图片搜索API接口:深度解析与显著收益

在电子商务的浩瀚海洋中&#xff0c;数据是驱动业务决策的核心引擎。阿里巴巴旗下的1688平台&#xff0c;作为全球领先的B2B在线市场&#xff0c;不仅汇聚了海量的商品信息&#xff0c;还提供了丰富的API接口&#xff0c;为开发者提供了强大的数据获取工具。本文将深入探讨1688…

回归预测 | MATLAB实LSTM多输入单输出回归预测

回归预测 | MATLAB实LSTM多输入单输出回归预测 目录 回归预测 | MATLAB实LSTM多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 LSTM多输入单输出回归预测 程序设计 完整代码&#xff1a;MATLAB实LSTM多输入单输出回归预测 %% 清空环境变量 warni…

从 0 到 1,用 FastGPT 搭建专属私有化知识库与超智能 AI 助理

田园课堂私有化知识库搭建流程与总结 引言 在当今数字化时代&#xff0c;知识管理与智能交互对于教育领域的创新发展至关重要。FastGPT作为一款高效的AI流程构建可视化开源工具&#xff0c;为田园课堂实现私有化知识库的快速搭建提供了有力支持。本文将详细阐述使用FastGPT搭…