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

文章目录

  • 环境配置
  • 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 createdvoid Start(){// 读取第 0 行第 0 列的 CellDebug.Log(Sheet.GetCell(0, 0).GetValue()); // Result: "Hello"// 读取 B1 CellDebug.Log(Sheet.GetCell("B1").GetValue()); // Result: "Samples"}// Update is called once per framevoid 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 createdvoid 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 framevoid 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 -> ListbaseName = 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 createdvoid 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 framevoid Update(){ }
}
image-20250104032139815

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

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

相关文章

matlab时频分析库

time frequency gallery

『 Linux 』高级IO (三) - Epoll模型的封装与EpollEchoServer服务器

文章目录 前情提要Epoll 的封装Epoll封装完整代码(供参考) Epoll Echo ServerEpoll Echo Server 测试及完整代码 前情提要 在上一篇博客『 Linux 』高级IO (二) - 多路转接介绍并完成了两种多路转接方案的介绍以及对应多路转接方案代码的编写,分别为SelectServer服务器与PollSe…

PDF预览插件

PDF预览插件 可用于当前页面弹窗形式查看,可增加一些自定义功能 pdf预览插件 代码块: pdfobject.js <div class="pdfwrap"><div class="item"><h3>笑场</h3><div class="tags"><p>李诞</p><i&…

【Java项目】基于SpringBoot的【新生宿舍管理系统】

【Java项目】基于SpringBoot的【新生宿舍管理系统】 技术简介&#xff1a;本系统使用采用B/S架构、Spring Boot框架、MYSQL数据库进行开发设计。 系统简介&#xff1a;管理员登录进入新生宿舍管理系统可以查看首页、个人中心、公告信息管理、院系管理、班级管理、学生管理、宿舍…

Huginn - 构建代理、执行自动化任务

文章目录 一、关于 Huginn什么是Huginn&#xff1f;Huginn 功能加入Huginn展示 二、安装1、Docker2、本地安装3、开发 三、使用Huginn代理gems四、部署1、Heroku2、OpenShiftOpenShift 在线 3、在任何服务器上手动安装4、可选设置4.1 私人开发设置4.2 启用WeatherAgent4.3 禁用…

电子应用设计方案86:智能 AI背景墙系统设计

智能 AI 背景墙系统设计 一、引言 智能 AI 背景墙系统旨在为用户创造一个动态、个性化且具有交互性的空间装饰体验&#xff0c;通过融合先进的技术和创意设计&#xff0c;提升室内环境的美观度和功能性。 二、系统概述 1. 系统目标 - 提供多种主题和风格的背景墙显示效果&…

基于Spring Boot的IT技术交流和分享平台的设计与实现源码

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的IT技术交流和分享平台的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于S…

单元测试3.0+ @RunWith(JMockit.class)+mock+injectable+Expectations

Jmockit使用笔记_基本功能使用Tested_Injectable_Mocked_Expectations_jmockit.class-CSDN博客 静态变量直接赋值就好&#xff0c;没必要mock了 测试框架Jmockit集合junit使用 RunWith(JMockit.class) 写在测试案例类上的注解 Tested 在测试案例中,写在我们要测试的类上…

PADS Logic原理图中有很多页原理图,如何(怎样)删除其中一页或者多页

我们在进行PADS Logic进行原理图设计的时候&#xff0c;有时候可能遇到一次性设计了很多页的原理图&#xff0c;比如说十几页的原理图。那么我们在进行PADS Layout的时候&#xff0c;可能将这些原理图绘制两块板或者多块PCB板&#xff0c;那么这时候我们需要将其中的一张原理图…

Elasticsearch 创建索引 Mapping映射属性 索引库操作 增删改查

Mapping Type映射属性 mapping是对索引库中文档的约束&#xff0c;有以下类型。 text&#xff1a;用于分析和全文搜索&#xff0c;通常适用于长文本字段。keyword&#xff1a;用于精确匹配&#xff0c;不会进行分析&#xff0c;适用于标签、ID 等精确匹配场景。integer、long…

《GICv3_Software_Overview_Official_Release_B》学习笔记

1.不同版本的 GIC 架构及其主要功能如下图所示&#xff1a; 2.GICv2m&#xff08;Generic Interrupt Controller Virtualization Model&#xff09;是针对ARM架构的GIC&#xff08;通用中断控制器&#xff09;的一种扩展&#xff0c; GICv2m扩展为虚拟化环境中的中断管理提供了…

【QT】找不到qwt_plot.h

系统环境&#xff1a; linux 20.04 qt 6.7.2 cmake 3.22 原因&#xff1a; Qwt没有正式的FindQwt.cmake&#xff0c;Qwt也没有提供QwtConfig.cmake。而且cmake不支持qmake的配置特性&#xff0c;也不支持读取mkspecs (.prf)文件。也就是说cmake构建的qt项目不可用qwt。 解决步…

杰发科技——使用ATCLinkTool解除读保护

0. 原因 在jlink供电电压不稳定的情况下&#xff0c;概率性出现读保护问题&#xff0c;量产时候可以通过离线烧录工具避免。代码中开了读保护&#xff0c;但是没有通过can/uart/lin/gpio控制等方式进行关闭&#xff0c;导致无法关闭读保护。杰发所有芯片都可以用本方式解除读保…

Sublime Text4 4189 安装激活【 2025年1月3日 亲测可用】

-----------------测试时间2025年1月3日------------------- 下载地址 官方网址&#xff1a;https://www.sublimetext.com 更新日志&#xff1a;https://www.sublimetext.com/download V4189 64位&#xff1a;https://www.sublimetext.com/download_thanks?targetwin-x64 ....…

前后端规约

文章目录 引言I 【强制】前后端交互的 API请求内容响应体响应码II 【推荐】MVC响应体III【参考】IV 其他引言 服务器内部重定向必须使用 forward;外部重定向地址必须使用 URL 统一代理模块生成,否则会因线上采用 HTTPS 协议而导致浏览器提示“不安全”,并且还会带来 URL 维护…

linux安装redis及Python操作redis

目录 一、Redis安装 1、下载安装包 2、解压文件 3、迁移文件夹 4、编译 5、管理redis文件 6、修改配置文件 7、启动Redis 8、将redis服务交给systemd管理 二、Redis介绍 1、数据结构 ①字符串String ②列表List ③哈希Hash ④集合Set ⑤有序集合Sorted Set 2、…

在线RSA pem 密钥pkcs1转pkcs8格式--支持公钥和私钥

具体前往&#xff1a;在线RSA密钥pkcs1转pkcs8--在线将RSA私钥/公钥的pkcs1格式转换到pkcs8格式,支持pem格式

修复OpenLinkSaas客户端在使用AtomGit账号时页面崩溃

问题描述&#xff1a;当一个新的AtomGit用户登录OpenLinkSaas客户端后出现了页面崩溃。 从浏览器控制台来看&#xff0c;是gitNoticeList出现了null。 查看代码后发现是请求atomGit api是返回的一个null的列表 接下来我们加下保护性的代码&#xff0c;来兼容null或undefine的情…

rocketmq-pull模式-消费重平衡和拉取PullTaskImpl线程

1、观察consumer的线程模型 使用arthas分析 MQClientFactoryScheduledThread 定时任务线程 &#xff08;和push模式一致&#xff09; 定时任务线程&#xff0c;包含如下任务&#xff1a; 每2分钟更新nameServer列表 每30秒更新topic的路由信息 每30秒检查broker的存活&#x…

Ungoogled Chromium127 编译指南 MacOS 篇(二)- 项目要求

1. 引言 在开始编译 Ungoogled Chromium 之前&#xff0c;我们需要确保系统满足所有必要的硬件和软件要求。由于浏览器编译是一个资源密集型的任务&#xff0c;合适的硬件配置和完整的软件环境至关重要。本文将详细介绍编译 Ungoogled Chromium 所需的各项要求。 2. 硬件要求…