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

Unity | 游戏数据配置

目录

一、ScriptableObject

1.创建ScriptableObject

2.创建asset资源

3.asset资源的读取与保存

二、Excel转JSON

1.Excel格式

2.导表工具

(1)处理A格式Excel

(2)处理B格式Excel

三、解析Json文件

1.读取test.json文件

四、相关插件


        在游戏开发中,策划与程序需要有良好的配置环境来处理数据,可以直接使用ScriptableObject来处理数据,或者通过Excel转JSON的形式将数据表直接从Excel里抓取过来,也可以使用Sqlite进行数据存储。

一、ScriptableObject

        ScriptableObject适合数据量比较小的配置信息。每个继承到ScriptableObject的类需要单独在一个脚本文件中。嵌套的类需要声明Serializable特性。

[Serializable]是C#中System命名空间下的特性,标记一个类可被序列化。序列化是指将对象转换为字节流,以便存储到文件、网络传输或持久化数据。

[SerializeField]属于UnityEngine命令空间,表示某个字段可以被序列化,即可以在Inspector面板中显示。

1.创建ScriptableObject

        ScriptableObject的创建很简单,只需要继承ScriptableObject类并标注CreateAssetMenu特性即可。

    [CreateAssetMenu(fileName = "BackpackInfo", menuName = "Save/BackpackInfo")]public class BackpackInfo : ScriptableObject{public Item[] Items;}[System.Serializable]public class Item{public int ItemId;public int Count;}

        当然也可以嵌套类:

[CreateAssetMenu(fileName = "FurnitureConfig", menuName = "MyProj/FurnitureConfig")]
//该特性标记了ScriptableObject的基本信息,只有加入该特性,脚本才能以文件对象的形式被创建
public class FurnitureScriptableObject : ScriptableObject
{[Serializable]      //声明是序列化类public class FurnitureInfo{public string DisplayName;        //显示名称public string Url;                //url地址public Vector3 Pos;               //位置}public FurnitureInfo[] furnitureInfoArray; //家具信息数组对象
}

2.创建asset资源

         编写完成上述脚本后就可以在Project面板的右键菜单中创建了,可以将创建的data.asset资源存放到Resources文件夹下,方便读取及保存。

        生成的data.asset文件是yaml语法,类似的有TagManager.asset等。 

YAML的基本语法规则包括:大小写敏感、使用缩进表示层级关系、禁止使用制表符缩进,且每个缩进级别应保持一致。

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:m_ObjectHideFlags: 0m_CorrespondingSourceObject: {fileID: 0}m_PrefabInstance: {fileID: 0}m_PrefabAsset: {fileID: 0}m_GameObject: {fileID: 0}m_Enabled: 1m_EditorHideFlags: 0m_Script: {fileID: 11500000, guid: 3969674121eab4a928178bee57fc1452, type: 3}m_Name: datam_EditorClassIdentifier: furnitureInfoArray:- DisplayName: Url: Pos: {x: 0, y: 0, z: 0}- DisplayName: Url: Pos: {x: 0, y: 0, z: 0}

3.asset资源的读取与保存

    FurnitureScriptableObject furnitureScriptableObject;public void GetDataFromLocal(){furnitureScriptableObject = Resources.Load<FurnitureScriptableObject>("_TempData/data");}/// <summary>/// 修改家具位置/// </summary>/// <param name="pos"></param>public void ChangePos(Vector3 pos){//这里只是举例说明,实际情况建议根据ID来修改if (furnitureScriptableObject.furnitureInfoArray.Length > 0){furnitureScriptableObject.furnitureInfoArray[0].Pos = pos;}SavePlayerInfoToLocal();}/// <summary>/// 保存数据到本地/// </summary>private void SavePlayerInfoToLocal(){// 标记资源为“脏”(表示需要保存)
#if UNITY_EDITORUnityEditor.EditorUtility.SetDirty(furnitureScriptableObject);// 手动保存资源UnityEditor.AssetDatabase.SaveAssets();
#endif}

二、Excel转JSON

        对于一些数据量比较大的配置信息,可以通过Excel导入数据的处理方式。

1.Excel格式

        常见的Excel配置表有两种格式:

  • A格式:每行代表名称、类型、客户端/服务端使用标识、描述

  •  B格式:以名称|类型来配置,读取时代码来进行字符串处理(当然也可以添加描述等信息):

2.导表工具

        首先需要编写一个中间程序,使用EPPlus去读Excel文件并取出前几列的数据作为数据字段定义,并按照模板生成.cs文件和json序列化文件。

(1)处理A格式Excel

        提前写了一个ConfigBase类作为父类,每个Excel的Sheet生成的类都继承该类。

using System.Collections.Generic;
using Modules.Common.UniUtils;
using Newtonsoft.Json;
using UnityEngine;namespace PetBuddy
{public class ConfigBase{public int ID;private static ConfigBase _instance;protected Dictionary<int, ConfigBase> ToDictionary = new Dictionary<int, ConfigBase>();private static Dictionary<string, ConfigBase> _configs = new Dictionary<string, ConfigBase>();public static T GetConfigById<T>(int id) where T : ConfigBase, new(){var name = typeof(T).Name;name = name.Replace("Config", "");if (!_configs.ContainsKey(name)){var config =

相关文章:

Unity | 游戏数据配置

目录 一、ScriptableObject 1.创建ScriptableObject 2.创建asset资源 3.asset资源的读取与保存 二、Excel转JSON 1.Excel格式 2.导表工具 (1)处理A格式Excel (2)处理B格式Excel 三、解析Json文件 1.读取test.json文件 四、相关插件 在游戏开发中,策划…...

IT工具 | node.js 进程管理工具 PM2 大升级!支持 Bun.js

P(rocess)M(anager)2 是一个 node.js 下的进程管理器&#xff0c;内置负载均衡&#xff0c;支持应用自动重启&#xff0c;常用于生产环境运行 node.js 应用&#xff0c;非常好用&#x1f44d; &#x1f33c;概述 2025-03-15日&#xff0c;PM2发布最新版本v6.0.5&#xff0c;这…...

VulnHub-Web-Machine-N7通关攻略

一、信息收集 第一步&#xff1a;确定靶机IP为192.168.0.107 第二步&#xff1a;扫描后台及开放端口 第三步&#xff1a;进行敏感目录及文件扫描 http://192.168.0.107/index.html (CODE:200|SIZE:1620) http://192.168.0.107/server-status (CODE:403|SIZ…...

发现一个好用的Vue.js内置组件

目录 一、这个好用的内置组件是什么&#xff1f; 二、这个组件的主要功能 三、怎么使用&#xff1f; 四、使用注意事项 五、我的使用场景 一、这个好用的内置组件是什么&#xff1f; 今天在优化我的平台应用时&#xff0c;发现一个好用的组件标签--<keep-alive>。 …...

论华为 Pura X 折叠屏性能检测

在科技浪潮中&#xff0c;折叠屏手机以其创新形态掀起市场热潮。华为 Pura X 作为华为最新折叠手机&#xff0c;承载前沿科技与精湛工艺&#xff0c;成为行业焦点。它融合先进折叠屏技术与优质材质&#xff0c;致力于打破传统手机使用边界&#xff0c;为用户开启全新体验。但产…...

生成PDF文件:从html2canvas和jsPdf渲染到Puppeteer矢量图

刚刚实现而已&#xff1a;第一次明白&#xff0c;双击或file:///打开html文件&#xff0c;居然和从localhost:3000打开同一个html文件有本质的区别。 字体居然还能以Base64代码嵌入到网页&#xff0c;只是太大太笨。 需要安装node.js&#xff0c;npm安装更多依赖&#xff1a;…...

在 Elasticsearch 中探索基于 NVIDIA 的 GPU 加速向量搜索

作者&#xff1a;来自 Elastic Chris Hegarty 及 Hemant Malik 由 NVIDIA cuVS 提供支持&#xff0c;此次合作旨在为开发者在 Elasticsearch 中的向量搜索提供 GPU 加速。 在 Elastic Engineering 组织内&#xff0c;我们一直致力于优化向量数据库的性能。我们的使命是让 Lucen…...

Junit在测试过程中的使用方式,具体使用在项目测试中的重点说明

JUnit 是一个广泛使用的 Java 单元测试框架,主要用于编写和运行可重复的测试。以下是 JUnit 在项目测试中的使用方式和重点说明: 1. 基本使用 场景:测试一个简单的 Java 类。 示例: import org.junit.Test; import static org.junit.Assert.*;public class CalculatorTe…...

关于CNN,RNN,GAN,GNN,DQN,Transformer,LSTM,DBN你了解多少

以下是神经网络中常见的几种模型的简要介绍&#xff1a; 1. ​CNN (Convolutional Neural Network, 卷积神经网络) ​用途: 主要用于图像处理和计算机视觉任务。​特点: 通过卷积核提取局部特征&#xff0c;具有平移不变性&#xff0c;能够有效处理高维数据&#xff08;如图像…...

asp.net 4.5在医院自助系统中使用DeepSeek帮助医生分析患者报告

环境&#xff1a; asp.net 4.5Visual Studio 2015本地已经部署deepseek-r1:1.5b 涉及技术 ASP.NET MVC框架用于构建Web应用程序。使用HttpWebRequest和HttpWebResponse进行HTTP请求和响应处理。JSON序列化和反序列化用于构造和解析数据。SSE&#xff08;服务器发送事件&#xf…...

HeyGem.ai 全离线数字人生成引擎加入 GitCode:开启本地化 AIGC 创作新时代

在人工智能技术飞速演进的时代&#xff0c;数据隐私与创作自由正成为全球开发者关注的焦点。硅基智能旗下开源项目 HeyGem.ai 近日正式加入 GitCode&#xff0c;以全球首个全离线数字人生成引擎的颠覆性技术&#xff0c;重新定义人工智能生成内容&#xff08;AIGC&#xff09;的…...

密码协议与网络安全——引言

三个基本概念 计算机安全&#xff08;Computer Security&#xff09;&#xff1a;对于一个自动化的信息系统&#xff0c;采取保护措施确保信息系统资源&#xff08;包括硬件、软件、固件、信息、数据和通信&#xff09;的保密性、完整性和可用性。 网络安全&#xff08;Netwo…...

springboot实现调用百度ocr实现身份识别+二要素校验

一、技术选型 OCR服务&#xff1a;推荐使用百度AI 二、实现 1.注册一个服务 百度智能云控制台https://console.bce.baidu.com/ai-engine/ocr/overview/index?_1742309417611 填写完之后可以获取到app-id、apiKey、SecretKey这三个后面文件配置会用到 2、导入依赖 <!-- …...

MATLAB 控制系统设计与仿真 - 28

MATLAB状态空间控制系统分析 - 极点配置 就受控系统的控制律的设计而言,由状态反馈极点配置和输出反馈极点配置。 状态反馈极点配置问题就是:通过状态反馈矩阵K的选取,使闭环系统的极点,即(A-BK)的特征值恰好处于所希望的一组给定闭环极点的位置。 另外,线性定常系统可…...

JetsonNano —— 4、Windows下对JetsonNano板卡烧录刷机Ubuntu20.04版本(官方教程)

介绍 NVIDIA Jetson Nano™ 开发者套件是一款面向创客、学习者和开发人员的小型 AI 计算机。按照这个简短的指南&#xff0c;你就可以开始构建实用的 AI 应用程序、酷炫的 AI 机器人等了。 烧录刷机 1、下载 Jetson Nano开发者套件SD卡映像 解压出.img文件并记下它在计算机上的…...

加速还是安全?CDN与群联云防护的本质差异与适用场景

一、核心功能定位对比 维度传统CDN群联云防护核心目标内容加速&#xff08;降低延迟、提升访问速度&#xff09;安全防护&#xff08;抵御DDoS/CC攻击、隐藏源站&#xff09;技术重心缓存优化、边缘节点分发流量清洗、AI行为分析、加密隧道主要能力静态资源缓存、负载均衡攻击…...

简单理解机器学习中top_k、top_p、temperature三个参数的作用

在机器学习中&#xff0c;top_k、top_p 和 temperature 是用于控制生成模型&#xff08;如语言模型&#xff09;输出质量的参数&#xff0c;尤其在文本生成任务中常见。然而&#xff0c;网上文章很多很全&#xff0c;但大多晦涩难懂&#xff0c;今天我们来用最简单的语言谈谈它…...

Java面试黄金宝典6

1. 什么是 CAS 原理&#xff1a; CAS &#xff08;Compare-And-Swap&#xff09;是一种硬件级别的原子操作指令&#xff0c;在 Java 并发编程中常被用于实现无锁算法。其核心逻辑是&#xff1a;在进行数据更新时&#xff0c;会先将内存位置 V 的值与预期原值 A 进行比较&#x…...

【深度学习新浪潮】AI ISP技术与手机厂商演进历史

本文是关于AI ISP(人工智能图像信号处理器)的技术解析、与传统ISP(图像信号处理器)的区别、近三年研究进展,以及各大手机厂商在该领域演进历史的详细报告。本报告综合多个权威来源的信息,力求全面、深入地呈现相关技术发展脉络与行业动态。 第一部分:AI ISP的定义及与传…...

C语言基础08

内容提要 数组 排序算法&#xff1a;冒泡排序 二维数组 字符数组 数组 冒泡排序 排序思想&#xff08;向前冒泡&#xff09; 一次只排好一个数&#xff0c;针对n个数&#xff0c;最差情况需要n-1次就可以排好 每次排序假定第一个元素是最大或者最小&#xff0c;用第一个…...

基于Arm GNU Toolchain编译生成的.elf转hex/bin文件格式方法

基于Arm GNU Toolchain编译生成的.elf转hex/bin文件格式方法 已经弃用的版本&#xff08;Version 10.3-2021.10&#xff09;&#xff1a;gcc-arm-none-eabi&#xff1a;https://developer.arm.com/downloads/-/gnu-rmArm GNU Toolchain当前版本&#xff1a;https://developer.a…...

1.angular介绍

初級使用视频添加链接描述 angular工具 angular.module(‘名’, [依赖模块]) 模块 angular.bind(*) : 修改this指向 angualr.copy() // a angular.copy(a, b) —a完全覆盖了b,c就是a angular.extend(a, b) a里面集成了b属性 angular.isArray angular.isDate angular.isDefin…...

java项目40分钟后token失效问题排查(40分钟后刷新页面白屏)

项目40分钟后token失效问题排查&#xff08;40分钟后刷新页面白屏&#xff09; 经过我 对比失效前token 可以正常访问接口&#xff0c;失效后的token 不能访问系统&#xff0c; 得出结论&#xff0c;我系统对接第三方 sso 系统&#xff0c;token 失效时间 在他们那边配置&…...

音频进阶学习二十——DFT离散傅里叶变换

文章目录 前言一、FT、FS、DTFT、DFS1.FT和FS2.DTFT和DFS 二、DFT定义1.对于DFT的理解1&#xff09;DTFT和DFT2&#xff09;DFS和DFT3&#xff09;有限长序列和周期序列 2.圆周卷积1&#xff09;线性卷积2&#xff09;圆周卷积 三、频率采样和插值恢复1.频率采样的影响2.频率采…...

【Rust】集合的使用——Rust语言基础16

文章目录 1. 前言2. Vector2.1. 构建一个 vector2.2. 获取 vector 中的元素2.3. 遍历 vector2.4. 使用枚举来储存多种类型 3. String3.1. 新建字符串3.2. 更新字符串3.3. 字符串的内部结构3.3.1. 字符串如何访问内部元素&#xff1f;3.3.2. 字节、标量值和字形簇 3.4. 字符串 s…...

centos 7 部署ftp 基于匿名用户

在 CentOS 7 上搭建基于匿名用户的 FTP 服务&#xff0c;可按以下步骤进行&#xff1a; 1. 安装 vsftpd 服务 vsftpd 是一款常用的 FTP 服务器软件&#xff0c;可使用以下命令进行安装&#xff1a; bash sudo yum install -y vsftpd2. 启动并设置开机自启 vsftpd 服务 bash …...

Apache SeaTunnel脚本升级及参数调优实战

最近作者针对实时数仓的Apache SeaTunnel同步链路&#xff0c;完成了双引擎架构升级与全链路参数深度调优&#xff0c;希望本文能够给大家有所启发&#xff0c;欢迎批评指正&#xff01; Apache SeaTunnel 版本 &#xff1a;2.3.9 Doris版本&#xff1a;2.0.6 MySQL JDBC Conne…...

算法 | 优化算法比较

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 优化算法 ‌一、主流优化算法分类‌1‌、传统梯度类算法‌2‌、启发式算…...

破局 MySQL 死锁:深入理解锁机制与高效解决方案

死锁的原理 1. 什么是死锁&#xff1f; 当 多个事务 在并发执行时&#xff0c;每个事务都 持有其他事务需要的锁&#xff0c;同时又在 等待对方释放锁&#xff0c;导致所有事务都无法继续执行的状态&#xff0c;称为 死锁&#xff08;Deadlock&#xff09;。 2. 死锁的四个必要…...

学习记录-cssjs-综合复习案例(二)

目录 商城复合案例功能实现&#xff08;二&#xff09;商城首页实现步骤1.准备工作2. 搭建html框架3. 编写js代码 完整实例代码完整项目心得 商城复合案例功能实现&#xff08;二&#xff09; 使用html&#xff0c;css&#xff0c;基于bootstrap框架以及媒体查询搭建响应式布局…...