【Unity】使用ScriptableObject存储数据
1.为什么要用ScriptableObject?
在游戏开发中,有大量的配置数据需要存储,这个时候就需要ScriptableObject来存储数据了。
很多人会说我可以用json、xml、txt,excel等等
但是你们有没有想过,假设你使用的是json,那你在加载json后,还要去解析,还需要把它转换为合适的数据结构。
但是ScriptableObject就可以“免”去这一步,因为我可以把配置数据解析放在游戏启动之前。
而且ScriptableObject可以添加一些自定义的方法,十分方便。
2.什么是 ScriptableObject?
ScriptableObject 是一个类,继承自 UnityEngine.Object 。要想使用它,需要我们写个脚本去继承 。
ScriptableObject 类的实例会被保存为资源文件(.asset文件),和其他预制体、材质球、图片等文件类似。如下图

3.如何创建 ScriptableObject?
①声明自定义的数据容器
新建一个脚本ItemData.cs,继承 ScriptableObject,然后声明成员。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ItemData : ScriptableObject
{//道具IDpublic int id;//道具名称public string strName;//道具图标public string icon;//道具类型public int type;
}
②创建数据文件
方法一:为类添加 CreateAssetMenu 特性
[CreateAssetMenu(fileName = "ItemData", menuName = "ScriptableObject/道具数据", order = 0)]
点击文件夹空白处,选择创建
方法二:静态方法创建数据对象
新建一个EditorTool 脚本。不用继承 MonoBehavoiur,也不用挂载到游戏物体上。
引入 UnityEditor 命名空间:
需要特别注意:引入 UnityEditor 命名空间的脚本,必须放入任意一个命名为“Editor”的文件夹下,以便打包过滤
using UnityEngine;
using UnityEditor;
public class EditorTool
{[MenuItem("Tool/创建道具数据")]public static void CreateMyData(){//得到需要创建的数据结构类型ItemData asset = ScriptableObject.CreateInstance<ItemData>();//创建一个数据资源文件,第二个参数为存储路径AssetDatabase.CreateAsset(asset, "Assets/Resources/Data/ItemData.asset");//保存创建的资源AssetDatabase.SaveAssets();//刷新界面AssetDatabase.Refresh();}
}
此时在菜单栏可以看到多了刚刚定义的按钮,点击即可创建

创建完就长这样,刚刚申明的成员也到可以看到。

4.项目中的 ScriptableObject
ScriptableObject已经创建完毕了,但实际开发中,数据结构可能很复杂,所以都会根据不同的功能,有所改变。
①比如,这是一个存储地形数据的配置,那么数据量就可能非常大,可能有几万行。这时候我们可以加HideInInspector来隐藏面板显示。隐藏的好处是选择当前配置不卡顿,不然数据多,选中会非常卡。
[HideInInspector]
public int[] data;
②嵌套使用,正常的配置可能都是数组,那可能就需要使用如下这种结构了
using UnityEngine;public class ItemData : ScriptableObject
{public Item[] list;}
[System.Serializable]
public class Item
{//道具IDpublic int id;//道具名称public string strName;//道具图标public string icon;//道具类型public int type;[HideInInspector]public int[] data;
}
③封装一些方法,方便其他功能使用
public class ItemData : ScriptableObject
{public Item[] list;//根据道具ID获取数据public Item GetSheet(int id){for (int i = 0;i < list.Length;i++){if (list[i].id == id){return list[i];}}return null;}
}
[
5.加载 ScriptableObject
void Start(){string path = "Data/ItemData";Object obj = Resources.Load(path, typeof(ScriptableObject));if (obj != null){ItemData mItemData = obj as ItemData;}}
6.与exce配合使用
在正常开发中,肯定不可能手动配置ScriptableObject
正常的策划配置文件都是excel,我们可以写个方法,直接读取excel的数据然后生成ScriptableObject
双剑合并,效率翻倍!
不会Excel读取的,可以参考这篇文章
Unity读取Excel教程
相关文章:
【Unity】使用ScriptableObject存储数据
1.为什么要用ScriptableObject? 在游戏开发中,有大量的配置数据需要存储,这个时候就需要ScriptableObject来存储数据了。 很多人会说我可以用json、xml、txt,excel等等 但是你们有没有想过,假设你使用的是json&#x…...
ChatGPT聊天机器人数据隐私和安全问题
ChatGPT是否安全使用? 是的,ChatGPT是安全的,因为它无法对你或你的计算机造成任何直接损害。由于网页浏览器和智能手机操作系统都使用了沙箱技术,因此ChatGPT无法访问你设备的其余部分。换句话说,当你使用ChatGPT应用程…...
MyBatis三个经典问题
1. Mybatis的执行流程 MyBatis 是一个流行的 Java 持久化框架,提供了对象关系映射 (ORM) 和 SQL 映射的功能,使开发者能够更加方便地与数据库交互。MyBatis 的执行流程大致如下: 配置阶段: 加载配置文件: MyBatis 通过读取配置文件ÿ…...
JavaEE+springboot教学仪器设备管理系统o9b00-springmvc
本文旨在设计一款基于Java技术的教学仪器设备销售网站,以提高网站性能、功能完善、用户体验等方面的优势,解决现有教学仪器设备销售网站的问题,并为广大教育工作者和学生提供便捷的教学仪器设备销售渠道。本文首先介绍了Java技术的相关基础知…...
Java项目:37 springboot003图书个性化推荐系统的设计与实现
作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 springboot003图书个性化推荐系统的设计与实现 管理员:首页、个人中心、学生管理、图书分类管理、图书信息管理、图书预约管理、退…...
mysql 8 修改账号密码
一 进入Mysql bin目录 cmd 运行(跳过密码),运行完不要关闭 mysqld --console --skip-grant-tables --shared-memory 二 新打开一个cmd mysql bin 目录下登录,密码输入时,直接回车 mysql -uroot -p 三 修改密码 m…...
拜占庭将军问题与区块链
文章目录 拜占庭将军问题问题背景问题的现实意义将军-副官模型三将军问题四将军问题3m将军问题 口头消息算法基本假设方法介绍正确性证明 签名消息算法 区块链区块链是什么区块链对于拜占庭将军问题的解决方法工作量证明奖励机制最长链原则小结 区块链的意义 总结 拜占庭将军问…...
字节跳动热门的前端开源项目
字节跳动开源官网 Arco Dsign Arco Design 是一套设计系统,主要服务于字节跳动旗下中后台产品的体验设计和技术实现。它的目标在于帮助设计师与开发者解放双手、提升工作效率,并高质量地打造符合业务规范的中后台应用。它拥有系统的设计规范和资源&…...
uniapp+vue基于Android的图书馆借阅系统qb4y3-nodejs-php-pyton
uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 框架支持:springboot/django/php/Ssm/flask/express均支持 前端开发:vue 语言:pythonjavanode.jsphp均支持 运行软件:idea/eclip…...
RabbitMQ如何实现延迟消息?
RabbitMQ中是可以实现延迟消息的,一般有两种方式,分别是通过死信队列以及通过延迟消息插件来实现。 扩展: 死信队列 当rabbitMQ中的一条正常的消息,因为过了存活时间(TTL过期),队列长度超限&a…...
Svg Flow Editor 原生svg流程图编辑器(一)
效果展示 项目概述 svg flow editor 是一款流程图编辑器,提供了一系列流程图交互、编辑所必需的功能,支持前端研发自定义开发各种逻辑编排场景,如流程图、ER 图、BPMN 流程等。 目前也有比较好的流程图设计框架,但是还是难满足项目…...
头像剪切上传
头像剪切上传 文章说明核心Api示例源码效果展示源码下载 文章说明 本文主要为了学习头像裁剪功能,以及熟悉canvas绘图和转文件的相关操作,参考教程(Web渡一前端–图片裁剪上传原理) 核心Api 主要就一个在canvas绘图的操作 context…...
24计算机考研调剂 | 北京信息科技大学
北京信息科技大学接收调剂研究生 考研调剂招生信息 学校:北京信息科技大学 专业:工学->控制科学与工程->控制理论与控制工程 年级:2024 招生人数:- 招生状态:正在招生中 联系方式:********* (为保护个人隐私,联系方式仅限APP查看) 补充内容 各位同学,…...
06 - 镜像管理
1 了解镜像 Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 但注意, 镜像不包含任何动态数据&#…...
最简单 导航栏 html css
dhl.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>导航栏</title><link type"text/css" rel"stylesheet" href"css/dhl.css"></head><div class"dhl&quo…...
PostgreSQL的学习心得和知识总结(一百三十一)|深入理解PostgreSQL数据库如何使用psql中的变量
目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库链接,点击前往 4、日本著名PostgreSQL数据库专家 铃木启修 网站…...
支付宝小程序模板开发,实现代小程序备案申请
大家好,我是小悟 支付宝小程序备案整体流程总共分为五个环节:备案信息填写、平台初审、工信部短信核验、通管局审核和备案成功。 服务商可以代小程序发起备案申请。在申请小程序备案之前,需要确保小程序基本信息已填写完成、小程序至少存在一…...
怎么培养孩子的学习习惯?
问:在亲子阅读中,应该用哪些方法引导孩子自己主动阅读呢? 有很多家长会问如何培养孩子主动阅读的兴趣? 我想给你四个词来分享,分别是环境、选择的权利、适龄,还有增强回路。第一个环境,就是把…...
deeplearning with pytorch (三)
一.基本概念 1.Convolutional Neural Network Intro mnist数据集 2.Image Filter / Image Kernel Image Kernels explained visually 访问这个网站可以直观看到image kernels对图片的影响 3.Convolutional Layer and RGB 为什么要用巻积神经网络代替人工神经网络 上图是…...
LLaMA模型的发布与创新潮流
时间线从2023年2月24日开始,Meta推出了LLaMA模型,虽然开源了代码,却没有开源模型权重。LLaMA模型可以说是相对较小的,拥有7B、13B、33B和65B参数的几种版本,训练时间相对较长,因此相对于其大小而言能力强大…...
5分钟让你的Python应用拥有Windows 11专业界面:py-window-styles完全指南
5分钟让你的Python应用拥有Windows 11专业界面:py-window-styles完全指南 【免费下载链接】py-window-styles Customize your python UI window with awesome pre-built windows 11 themes. 项目地址: https://gitcode.com/gh_mirrors/py/py-window-styles 还…...
告别Python程序分发难题:Auto PY to EXE图形化打包终极指南
告别Python程序分发难题:Auto PY to EXE图形化打包终极指南 【免费下载链接】auto-py-to-exe Converts .py to .exe using a simple graphical interface 项目地址: https://gitcode.com/gh_mirrors/au/auto-py-to-exe 还在为Python程序分享而烦恼吗&#x…...
Multiverse 引擎3.0:大屏、移动、AR三端覆盖,AR交互功能详解
在Multiverse 3.0版本中,我们首次实现了移动端、大屏端与AR端的全覆盖。基于“一模双擎”架构,用户在Web端可视化编辑器(支持“拖、拉、拽”搭建场景)中创建的数字孪生场景,可在像素流中直接加载,自动适配到…...
Spring Security权限进阶:用@PostAuthorize和@PostFilter保护你的API返回数据(Spring Boot 3.x实战)
Spring Security权限进阶:用PostAuthorize和PostFilter保护你的API返回数据(Spring Boot 3.x实战) 在构建现代Web应用时,数据安全始终是开发者面临的核心挑战之一。传统权限控制往往聚焦于"入口检查"——确保只有合法用…...
承压含水层中变流量抽水试验井流动力学模型与参数反演方法【附算法】
✨ 长期致力于变流量、抽水试验、参数反演、井损、粒子群优化算法研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)线性衰减变流量抽水试验理论模型与半…...
量子纠缠与动态电路:CHSH不等式在NISQ时代的应用
1. 量子纠缠与CHSH不等式:动态电路性能评估在量子计算领域,高质量的量子纠缠是实现量子优势的关键资源。就像建筑需要坚固的钢筋骨架一样,量子算法依赖于稳定的纠缠态作为其计算基础。然而在当前的NISQ(Noisy Intermediate-Scale …...
光电效应实验避坑指南:从汞灯预热到遏止电压判读,新手常犯的5个错误
光电效应实验避坑指南:从汞灯预热到遏止电压判读的5个关键误区 在大学的物理实验室里,光电效应实验就像一位性格古怪的教授——看似简单明了,实则暗藏玄机。许多同学满怀信心地走进实验室,却在数据采集阶段屡屡碰壁,最…...
你的旋钮漂移吗?EC11编码器在51单片机上的硬件消抖与软件滤波实战避坑指南
EC11编码器实战:从硬件消抖到软件滤波的稳定性优化全攻略 在嵌入式控制领域,旋转编码器作为人机交互的重要组件,其稳定性直接影响用户体验。EC11作为经济实用的机械编码器代表,广泛应用于音量调节、参数设置等场景。但当电机干扰、…...
AI Scientist-v2论文撰写流程:从实验结果到ICLR格式论文的自动化转换
AI Scientist-v2论文撰写流程:从实验结果到ICLR格式论文的自动化转换 【免费下载链接】AI-Scientist-v2 The AI Scientist-v2: Workshop-Level Automated Scientific Discovery via Agentic Tree Search 项目地址: https://gitcode.com/GitHub_Trending/ai/AI-Sci…...
还在熬夜改论文格式?okbiye 本科毕业论文写作功能,一键搞定你的毕业难题
okbiye-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPT毕业论文 - Okbiye智能写作https://www.okbiye.com/ai/bylw 当查重报告里飘红的句子、学校格式手册里密密麻麻的排版要求、凌晨三点还没理顺的论文大纲,成为每个本科生毕业季的共同记忆时&…...
