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

Unity 读Excel,读取xlsx文件解决方案

Unity读取表格数据

效果:

请添加图片描述

思路:

Unity可以解析Json,但是读取Excel需要插件的帮助,那就把这个功能分离开,读表插件就只管读表转Json,Unity就只管Json解析,中间需要一个存储空间,使用ScriptableObject数据类是个不错的选择。
缺点也很明显,我们只能在Unity编辑器模式下使用这个工具,也就是无法在打包后读取Excel,不过我们再也不用担心读表插件出问题了,因为打包后根本用不到读表插件。
实现步骤:
  • 步骤一:Excel数据转换成Json数据
  • 步骤二:将数据存储到ScriptableObject持久类中
  • 步骤三:Unity读取ScriptableObject类

Excel数据转换成Json数据

因为只考虑在Unity编辑器模式使用,所以直接写一个编辑器窗口就行了

在这里插入图片描述

主要功能概述
  • 用户界面(EditorWindow):提供一个界面让用户选择 Excel 文件,并进行相应的操作,如选择是否生成 C# 类文件、开始转换等。
  • 文件处理:用户可以拖拽文件或文件夹到指定区域,程序会识别路径并加载 Excel 文件列表。
  • 转换操作:Excel 文件被读取,转换为 JSON 数据,并保存到指定路径。
  1. 打开编辑窗口
[MenuItem("Tools/ExcelToJson")]
public static void ShowWindow()
{ExcelToUnityWindow window = GetWindow<ExcelToUnityWindow>("Excel 转 Json 工具");window.minSize = new Vector2(400 , 300);
}

这段代码创建了一个编辑器窗口,当用户点击 Unity 编辑器菜单中的 “Tools/ExcelToJson” 时,会弹出 ExcelToUnityWindow 窗口。

  1. 初始化并加载 JsonFileData
private void OnEnable()
{csOutputPath = Path.Combine(Application.dataPath , "Tool/ExcelTool/ConfigData");jsonFileCollector = Resources.Load<JsonFileData>("JsonFileCollector");if (jsonFileCollector == null)Debug.LogError("未找到 JsonFileCollector 实例,请确保已创建该资产文件!");RefreshFileList();
}

OnEnable 方法会在编辑器窗口启用时调用,它会加载 JsonFileCollector 实例,这个实例用于管理 JSON 数据。

  1. 文件夹路径选择与拖拽支持
private void HandleDragAndDrop(Rect dropArea)
{Event evt = Event.current;if (evt.type == EventType.DragUpdated || evt.type == EventType.DragPerform){if (dropArea.Contains(evt.mousePosition)){DragAndDrop.visualMode = DragAndDropVisualMode.Copy;if (evt.type == EventType.DragPerform){DragAndDrop.AcceptDrag();if (DragAndDrop.paths.Length > 0){string draggedPath = DragAndDrop.paths[0];if (File.Exists(draggedPath) && draggedPath.EndsWith(".xlsx")){folderPath = Path.GetDirectoryName(draggedPath);}else if (Directory.Exists(draggedPath)){folderPath = draggedPath;}RefreshFileList();}evt.Use();}}}
}

这个方法实现了拖拽功能,用户可以将文件或文件夹拖拽到指定区域,程序会检测并更新路径。

  1. 转换文件的核心操作
private void ConvertExcelFiles()
{foreach (string filePath in selectedExcelFiles){ParseFile(filePath , createCS , csOutputPath);}EditorUtility.DisplayDialog("完成" , "所有 Excel 文件已成功转换!" , "确定");
}

ConvertExcelFiles() 方法会遍历用户选择的 Excel 文件,并调用 ParseFile() 方法来处理每一个文件。这个方法的核心功能是将 Excel 文件转换为 JSON 格式。

  1. Excel 文件解析与 JSON 转换
private static string ParseFile(string path , bool createCS , string csOutputPath)
{if (!path.EndsWith("xlsx")) return null;string tableName = "";string cfgName = "";Excel excel = null;try{(Excel a, string b) temp = ExcelHelper.LoadExcel(path);excel = temp.a;cfgName = temp.b;StringBuilder sb = new StringBuilder();JsonWriter writer = new JsonWriter(sb);writer.WriteObjectStart();foreach (ExcelTable table in excel.Tables){tableName = table.TableName;if (tableName.StartsWith("#")) continue;if (createCS){try{Debug.Log($"生成 C# 类文件:{csOutputPath}");ExcelDeserializer deserializer = new ExcelDeserializer{FieldNameLine = 1,FieldTypeLine = 2,FieldValueLine = 3,IgnoreSymbol = "#",ModelPath = $"{Application.dataPath}/Tool/ExcelTool/Editor/Excel/ExcelToUnity/DataItem.txt"};deserializer.GenerateCS(table, cfgName, csOutputPath);  // 生成 C# 文件}catch (System.Exception ex){Debug.LogError($"生成 C# 类文件时出错: {ex.Message}");return null;}}writer.WritePropertyName("Config");writer.WriteArrayStart();for (int i = 4; i <= table.NumberOfRows; i++){string idStr = table.GetValue(i, 1)?.ToString();if (string.IsNullOrEmpty(idStr)) break;writer.WriteObjectStart();for (int j = 1; j <= table.NumberOfColumns; j++){string propName = table.GetValue(1, j)?.ToString()?.Replace("*", "");string propType = table.GetValue(2, j)?.ToString();if (string.IsNullOrEmpty(propName) || propName.StartsWith("#")) continue;writer.WritePropertyName(propName);string value = table.GetValue(i, j)?.ToString();if (propType == "int"){writer.Write(int.TryParse(value, out int intValue) ? intValue : 0);}else if (propType == "bool"){writer.Write(value == "1" || value.ToLower() == "true");}else if (propType == "float"){writer.Write(float.TryParse(value, out float floatValue) ? floatValue : 0);}else{writer.Write(value);}}writer.WriteObjectEnd();}writer.WriteArrayEnd();}writer.WriteObjectEnd();string outputDir = Path.Combine(Application.streamingAssetsPath, "DataFiles");if (!Directory.Exists(outputDir)) Directory.CreateDirectory(outputDir);string outputPath = Path.Combine(outputDir, Path.GetFileNameWithoutExtension(path) + ".json");File.WriteAllText(outputPath, sb.ToString());Debug.Log("转换成功!路径:" + outputPath);return sb.ToString();}catch (System.Exception ex){Debug.LogError($"转换文件 {path} 时出错: {ex.Message}");return null;}
}

这是处理 Excel 转 JSON 的关键方法。主要流程如下:

  • 加载 Excel 文件:使用 ExcelHelper.LoadExcel() 方法加载 Excel 文件。
  • 遍历表格:对于每个表格,程序会遍历表格中的行和列,将数据转换成适当类型(int, bool, float, string)。
  • 生成 JSON:利用 JsonWriter 将表格中的数据按格式写入 JSON 格式。
  • 保存文件:生成的 JSON 数据被保存到 DataFiles 文件夹中。

将数据存储到ScriptableObject持久类中。

准备存储Json数据
    [System.Serializable]public class JsonData{[HideInInspector]public string FileName;public string Parent;public string Title;public JsonData(string fileName , string parent , string title){FileName = fileName;Parent = parent;Title = title;}}[System.Serializable]public class ConfigData{public string configName;public int propertyCount;public string data;public ConfigData(string configName , int propertyCount){this.configName = configName;this.propertyCount = propertyCount;}}[Header("JSON 文件信息列表")][Tooltip("每个 JSON 文件的 Json数据")]public List<ConfigData> jsonDataList = new List<ConfigData>();[Tooltip("每个 JSON 文件的 Parent 和 Title 字段")]public List<JsonData> jsonPropertyList = new List<JsonData>();
首先遍历目标路径,查找所有 JSON 文件并解析其内容
public void RefreshJsonFileList()
{jsonDataList.Clear();jsonPropertyList.Clear(); // 清空列表if (!Directory.Exists(dataFilesPath)){Debug.LogError($"目标路径不存在: {dataFilesPath}");return;}string[] files = Directory.GetFiles(dataFilesPath, "*.json");if (files.Length == 0){Debug.LogWarning("未找到任何 JSON 文件.");}foreach (var file in files){string fileName = Path.GetFileNameWithoutExtension(file);int propertyCount = GetJsonFilePropertyCount(file);jsonDataList.Add(new ConfigData(fileName, propertyCount));ReadJsonFile(file, fileName);}Debug.Log($"找到 {jsonDataList.Count} 个 JSON 文件.");
}
  • Directory.GetFiles 查找文件夹中的 .json 文件。
  • GetJsonFilePropertyCount 获取每个文件中 Config 数组中第一个对象的属性数量。
  • ReadJsonFile 解析 JSON 文件,提取 Parent 和 Title 信息。
读取 JSON 文件内容
public void ReadJsonFile(string file, string fileName)
{string jsonContent = File.ReadAllText(file);JObject jsonObject = null;try{jsonObject = JObject.Parse(jsonContent);}catch (System.Exception ex){Debug.LogError($"解析文件失败: {file}, 错误: {ex.Message}");return;}JArray configArray = jsonObject["Config"] as JArray;if (configArray != null){foreach (var configItem in configArray){string parent = configItem["Parent"]?.ToString();string title = configItem["Title"]?.ToString();if (!string.IsNullOrEmpty(parent) && !string.IsNullOrEmpty(title)){jsonPropertyList.Add(new JsonData(fileName, parent, title));}}}
}
  • 使用 File.ReadAllText 读取文件内容。
  • 通过 JObject.Parse 解析 JSON 字符串。
  • 查找 Config 数组中的每个元素,提取 Parent 和 Title,并将其与文件名一起保存为 JsonData 对象。
获取 JSON 文件的属性数量,方便分类
int GetJsonFilePropertyCount(string file)
{string jsonContent = File.ReadAllText(file);JObject jsonObject = null;try{jsonObject = JObject.Parse(jsonContent);}catch (System.Exception ex){Debug.LogError($"解析文件失败: {file}, 错误: {ex.Message}");return 0;}JArray configArray = jsonObject["Config"] as JArray;if (configArray == null || configArray.Count == 0){Debug.LogWarning($"文件 {file} 中没有找到有效的 'Config' 数组。");return 0;}return configArray[0].Children<JProperty>().Count();
}
  • 读取 JSON 文件并解析为 JObject。
  • 获取 Config 数组的第一个元素,并统计其属性数量。
加载和保存 JSON 数据
  • 加载 JSON 数据,GetJsonData() 和 LoadConfig() 方法批量加载 JSON 数据:
public void GetJsonData()
{
#if UNITY_EDITORcfgProgress = 0;string filepath = ConfigManager.GetStreamingAssetsPath();foreach (var item in jsonDataList){string configPath = $"DataFiles/{item.configName}.json";LoadConfig(item, configPath, filepath, jsonDataList.Count);}
#endif
}void LoadConfig(ConfigData configData, string configPath, string filepath, int Count, Action OnConfigLoaded = null)
{
#if UNITY_EDITORstring filePath = Path.Combine(filepath, configPath);try{if (File.Exists(filePath)){string fileContent = File.ReadAllText(filePath);configData.data = fileContent;cfgProgress++;if (cfgProgress == Count){OnConfigLoaded?.Invoke();}}else{Debug.LogError($"文件不存在: {filePath}");}}catch (Exception ex){Debug.LogError($"加载配置表时发生错误: {ex.Message}");}
#endif
}
  • 保存实例
public void SaveInstance()
{
#if UNITY_EDITOREditorUtility.SetDirty(this); // 标记为已修改AssetDatabase.SaveAssets();   // 保存所有修改AssetDatabase.Refresh();      // 刷新数据库Debug.Log("JsonFileCollector 实例已保存.");
#endif
}
做一个编辑器面板用于手动读取保存数据
[CustomEditor(typeof(JsonFileData))]
public class JsonFileCollectorEditor : Editor
{public override void OnInspectorGUI(){JsonFileData collector = (JsonFileData)target;DrawDefaultInspector();if (GUILayout.Button("刷新文件列表", GUILayout.Height(30))){collector.RefreshJsonFileList();collector.GetJsonData();collector.SaveInstance();}GUILayout.Space(10);if (collector.jsonDataList.Count == 0){GUILayout.Label("未找到 JSON 文件.");}}
}

OK,大概这样子

在这里插入图片描述

Unity读取ScriptableObject类

解析 JSON 数据
加载完 JSON 文件后,你通常需要将字符串类型的 JSON 数据转换成实际的 C# 对象。这个过程通常依赖于第三方库(如 Newtonsoft.Json 或 LitJson)来解析。
可以通过 JsonMapper.ToObject 方法(来自 LitJson 库)将 JSON 字符串转换为指定类型的对象。

	public List<T> GetConfigRoot<T>(){foreach (var item in jsonDataList){if (item.configName == typeof(T).Name){ConfigRoot<T> configRoot = JsonMapper.ToObject<ConfigRoot<T>>(item.data); // 解析 JSON 数据为对象return configRoot.Config;}}return null;}public List<T> GetConfigRoot<T>(string name){foreach (var item in jsonDataList){if (item.configName == name){ConfigRoot<T> configRoot = JsonMapper.ToObject<ConfigRoot<T>>(item.data);return configRoot.Config;}}return null;}

通过上述步骤,Unity 使用存储好的 JSON 数据的流程如下:

  • 存储 JSON 数据:通过 ScriptableObject(如 JsonFileData)将 JSON 文件的数据存储在 ConfigData.data 字段中。
  • 加载 JSON 数据:通过 GetJsonData() 和 LoadConfig() 方法从磁盘读取 JSON 文件内容,并存储到内存中。
  • 解析 JSON 数据:使用第三方库(如 LitJson)将 JSON 字符串转换为 C# 对象,通常通过 JsonMapper.ToObject() 方法进行。
  • 使用数据:将解析后的数据应用到游戏逻辑中,如配置角色、武器、敌人等游戏元素。

通过这种方式,你能够在 Unity 中灵活地管理和使用 JSON 配置数据。

如何使用

一般来说需要提供一个数据类,一个表的名称就可以拿到里面的数据

例如:

JsonFileData.GetConfigRoot<数据类>(文件名)

不过如果有多张表,相同的结构该怎么办?

我们可以使用之前存储好的表名来遍历里面的数据,使用属性数量来过滤出我们使用的数据

属性数量8:
在这里插入图片描述
属性数量6:
在这里插入图片描述
过滤出数据:

foreach (var item in JsonFileData.jsonDataList)
{if (item.propertyCount==6){foreach (var config in JsonFileData.GetConfigRoot<Config_Default>(item.configName)){Config_Default Default = config;string info = "";info += "ID:" + Default.ID;info += ",父节点:" + Default.Parent;info += ",标题:" + Default.Title;info += ",内容:" + Default.Content;info += ",图片路径:" + Default.SpritePath;info += ",视频路径:" + Default.VideoPath;Debug.Log(info);}}else{foreach (var config in ConfigHelper.GetConfigInfo<Config_Answer>(item.configName)){Config_Answer Default = config;string info = "";info += "ID:" + Default.ID;info += ",父节点:" + Default.Parent;info += ",标题:" + Default.Title;info += ",内容:" + Default.OptionA;info += "," + Default.OptionB;info += "," + Default.OptionC;info += "," + Default.OptionD;info += ",答案:" + Default.CorrectAnswer;Debug.Log(info);}}
}

使用属性数量过滤不是一个好的选择,各位可以各显神通,看看如何解决这个问题。

Demo下载链接👉 读表工具

相关文章:

Unity 读Excel,读取xlsx文件解决方案

Unity读取表格数据 效果&#xff1a; 思路&#xff1a; Unity可以解析Json&#xff0c;但是读取Excel需要插件的帮助&#xff0c;那就把这个功能分离开&#xff0c;读表插件就只管读表转Json&#xff0c;Unity就只管Json解析&#xff0c;中间需要一个存储空间&#xff0c;使用…...

R基于贝叶斯加法回归树BART、MCMC的DLNM分布滞后非线性模型分析母婴PM2.5暴露与出生体重数据及GAM模型对比、关键窗口识别

全文链接&#xff1a;https://tecdat.cn/?p38667 摘要&#xff1a;在母婴暴露于空气污染对儿童健康影响的研究中&#xff0c;常需对孕期暴露情况与健康结果进行回归分析。分布滞后非线性模型&#xff08;DLNM&#xff09;是一种常用于估计暴露 - 时间 - 响应函数的统计方法&am…...

【信息系统项目管理师】高分论文:论信息系统项目的沟通管理(信息管理服务一体化平台)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文一、事预则立,规划沟通管理二、提升支持,管理沟通三、观察偏差,监督沟通论文 2022年2月,我公司承建某省退役军人信息管理服务一体化平台项目,由于本人具有较丰富的项目管理经验,同时也是一名退伍军人…...

物联网工厂可视化监控平台:为智能制造打造的可视化大屏

01行业背景 随着技术的不断进步&#xff0c;物联网&#xff08;IoT&#xff09;已经成为推动数字化转型的核心力量。物联网通过连接各种设备和传感器&#xff0c;实现数据的实时收集、传输和分析&#xff0c;为各行各业带来了革命性的变化。随着5G、云计算、大数据等技术的成熟…...

3、redis的高可用

主从复制 主从复制&#xff1a;这是redis高可用的基础。哨兵模式和集群都是建立在此基础之上。 主从模式和数据库的主从模式是一样的&#xff0c;主负责写入&#xff0c;然后把写入的数据同步到从&#xff0c;从节点只能读不能写。read only。 不能做高可用的切换&#xff…...

数据结构--顺序表(详解)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导&#xff0c;有错误的地方会改进的哦~点击这里了解更多内容 目录 一、线性表二、顺序表 一、线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结…...

Day62 图论part11

Floyd 算法精讲 Floyd 算法代码很简单&#xff0c;但真正理解起原理 还是需要花点功夫&#xff0c;大家在看代码的时候&#xff0c;会发现 Floyd 的代码很简单&#xff0c;甚至看一眼就背下来了&#xff0c;但我为了讲清楚原理&#xff0c;本篇还是花了大篇幅来讲解。 代码随想…...

git clone 超时

git clone 超时 参考 https://blog.csdn.net/qq_45906972/article/details/142214187?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-142214187-blog-137158358.235v43pc_blog_bottom_relevance_base8&spm1001.2101.3001.…...

WPF编程excel表格操作

WPF编程excel表格操作 摘要NPOI安装封装代码测试代码 摘要 Excel操作几种方式 使用开源库NPOI(常用&#xff0c;操作丰富)使用Microsoft.Office.Interop.Excel COM组件(兼容性问题)使用OpenXml(效率高)使用OleDb(过时) NPOI安装 封装代码 using System; using System.IO; u…...

Day10补代码随想录 理论基础|232.用栈实现队列|225.用队列实现栈|20.有效的括号|1047.删除字符串中的所有相邻重复项

栈和队列理论基础 抽象认识 栈是先进后出(FIFO)&#xff0c;队列是先进先出(LIFO) 队首(先进))队尾(后进)栈顶(后进)栈底(先进) 栈(Stack) 只在一端进行进出操作(只在一端进一端出)像个篮球框&#xff0c;取用篮球从一端进出。 /进栈 int a[1000];//足够大的栈空间 int top-1…...

【Devops】什么是Devops?(Development+Operations)和运维的区别?

DevOps&#xff08;Development Operations&#xff09;是一种将开发&#xff08;Development&#xff09;和运维&#xff08;Operations&#xff09;团队结合在一起的文化和实践&#xff0c;目的是通过自动化、协作和持续反馈来加快软件的开发、部署和运维的周期&#xff0c;…...

基于NodeMCU的物联网电灯控制系统设计

最终效果 基于NodeMCU的物联网电灯控制系统设计 小程序关灯 上图展现了小程序关灯过程的数据传输过程&#xff1a;用户下达关灯指令→小程序下发关灯指令→MQTT服务器接收关灯指令→下位机接收与处理关灯指令。 项目介绍 该项目是“物联网实验室监测控制系统设计&#xff08;…...

Linux驱动开发 IIC I2C驱动 编写APP访问EEPROM AT24C02

在嵌入式开发中&#xff0c;I2C&#xff08;Inter-Integrated Circuit&#xff09;是一种常用的串行通信协议&#xff0c;广泛应用于与外设&#xff08;如 EEPROM、传感器、显示屏等&#xff09;进行数据交换。AT24C02 是一种常见的 I2C EEPROM 存储器&#xff0c;它提供 2Kbit…...

Linux应用软件编程-多任务处理(线程)

线程&#xff1a;轻量级的进程&#xff0c;线程的栈区独立&#xff08;8M&#xff09;&#xff0c;与同一进程中的其他线程共用进程的堆区&#xff0c;数据区&#xff0c;文本区。 进程是操作系统资源分配的最小单位&#xff1b;线程是cpu任务调度的最小单位。 1. 线程的创建…...

VITUREMEIG | AR眼镜 算力增程

根据IDC发布的《2024年第三季度美国AR/VR市场报告》显示&#xff0c;美国市场AR/VR总出货量增长10.3%。其中&#xff0c;成立于2021年的VITURE增长速度令人惊艳&#xff0c;同比暴涨452.6%&#xff0c;成为历史上增长最快的AR/VR品牌。并在美国AR领域占据了超过50%的市场份额&a…...

Jenkins管理多版本python环境

场景&#xff1a;项目有用到python3.8和3.9&#xff0c;python环境直接安装在jenkins容器内。 1、进入jenkins容器 docker exec -it jenkins /bin/bash 2、安装前置编译环境 # 提前安装&#xff0c;以便接下来的配置操作 apt-get -y install gcc automake autoconf libtool ma…...

Flutter富文本实现学习

Flutter 代码如何实现一个带有富文本显示和交互的页面。 前置知识点学习 RealRichText RealRichText 和 ImageSpan 不是 Flutter 框架中内置的组件&#xff0c;而是自定义的组件或来自第三方库。这些组件的实现可以提供比标准 RichText 更丰富的功能&#xff0c;比如在富文本…...

如何解决 OpenAI API 连接问题:降级 urllib3 版本

如何解决 OpenAI API 连接问题&#xff1a;降级 urllib3 版本 在使用 OpenAI API 时&#xff0c;很多开发者可能会遇到连接问题&#xff0c;特别是在使用 Python 代码与 OpenAI 进行交互时。常见的错误包括 ProxyError、SSLError 和 MaxRetryError&#xff0c;它们通常表示在通…...

【C语言】库函数常见的陷阱与缺陷(三):内存分配函数[4]--free

C语言中的free函数用于释放之前通过malloc、calloc或realloc动态分配的内存。然而,在使用free函数时,开发者可能会遇到一些陷阱和缺陷。 一、功能与用法 free 函数是 C 语言中用于释放动态分配内存的关键函数。在程序使用 malloc、calloc 或 realloc 等函数在堆上分配了内存…...

论文分享 | PromptFuzz:用于模糊测试驱动程序生成的提示模糊测试

大语言模型拥有的强大能力可以用来辅助多种工作&#xff0c;但如何有效的辅助仍然需要人的精巧设计。分享一篇发表于2024年CCS会议的论文PromptFuzz&#xff0c;它利用模型提示生成模糊测试驱动代码&#xff0c;并将代码片段嵌入到LLVM框架中执行模糊测试。 论文摘要 制作高质…...

Hyper-V DDA图形界面终极指南:5分钟搞定设备直通配置

Hyper-V DDA图形界面终极指南&#xff1a;5分钟搞定设备直通配置 【免费下载链接】DDA 实现Hyper-V离散设备分配功能的图形界面工具。A GUI Tool For Hyper-Vs Discrete Device Assignment(DDA). 项目地址: https://gitcode.com/gh_mirrors/dd/DDA 还在为复杂的PowerSh…...

ROS usb_cam像素格式终极指南:从YUV、MJPEG到源码修改,彻底告别警告和花屏

ROS usb_cam像素格式终极指南&#xff1a;从YUV、MJPEG到源码修改&#xff0c;彻底告别警告和花屏 当你在ROS中调用UVC摄像头时&#xff0c;是否遇到过图像花屏或终端不断弹出"deprecated pixel format"警告&#xff1f;这些问题往往源于对像素格式的误解或配置不当。…...

Phi-4-mini-reasoning Chainlit前端定制:添加历史记录与多会话管理功能

Phi-4-mini-reasoning Chainlit前端定制&#xff1a;添加历史记录与多会话管理功能 1. 项目背景与目标 Phi-4-mini-reasoning是一个基于合成数据构建的轻量级开源模型&#xff0c;专注于高质量、密集推理的数据处理。该模型支持128K令牌的上下文长度&#xff0c;特别适合需要…...

Filament Shield 策略生成器:自动化权限策略开发完全指南

Filament Shield 策略生成器&#xff1a;自动化权限策略开发完全指南 【免费下载链接】filament-shield The easiest and most intuitive way to add access management to your Filament Panel; Resources, Pages & Widgets through spatie/laravel-permission 项目地址…...

Linux 的 mkfifo 命令

mkfifo 是 Linux 系统中用于创建命名管道(FIFO)的命令行工具。命名管道是一种特殊的文件类型&#xff0c;允许不相关的进程通过文件系统进行通信。 基本语法 mkfifo [选项] 文件名常用选项 -m, --modeMODE&#xff1a;设置管道文件的权限模式&#xff08;类似 chmod&#xf…...

3分钟解锁OBS直播新玩法:免费RTSP服务器插件完全指南

3分钟解锁OBS直播新玩法&#xff1a;免费RTSP服务器插件完全指南 【免费下载链接】obs-rtspserver RTSP server plugin for obs-studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-rtspserver 还在为OBS直播流无法接入监控系统而烦恼吗&#xff1f;想要让专业直播…...

League-Toolkit:让英雄联盟游戏体验变得智能高效

League-Toolkit&#xff1a;让英雄联盟游戏体验变得智能高效 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在英雄联盟游戏中遇到这些…...

vscode-mermaid-preview插件:从零开始掌握Mermaid图表绘制的完整指南

vscode-mermaid-preview插件&#xff1a;从零开始掌握Mermaid图表绘制的完整指南 【免费下载链接】vscode-mermaid-preview Previews Mermaid diagrams 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-mermaid-preview 如果你正在Visual Studio Code中编写技术文档…...

推荐系统必看:余弦距离与欧式距离在用户行为分析中的实战对比

推荐系统必看&#xff1a;余弦距离与欧式距离在用户行为分析中的实战对比 在构建推荐系统时&#xff0c;距离度量的选择往往决定了模型对用户偏好的理解深度。想象一下这样的场景&#xff1a;当两位用户同时观看了《星际穿越》和《盗梦空间》&#xff0c;但一位用户给前者打了…...

芯片时序分析避坑指南:当Setup/Hold Time出现负值,你的设计真的错了吗?

芯片时序分析中的负值迷思&#xff1a;当Setup/Hold Time打破常规认知 第一次在PrimeTime报告中看到-0.15ns的Hold Time时&#xff0c;我差点把咖啡喷在显示器上——这完全颠覆了我对时序分析的基础认知。作为从业五年的芯片设计工程师&#xff0c;我本能地认为这一定是某个环节…...