[Unity数据管理]自定义菜单创建Unity内部数据表(ScriptableObject)
Unity 在开发的时候如果数据量比较大,或者一部分数据需要存在云端,那么就需要一些数据库
轻量型到大型的包括:
数组-内存存储读取
列表-内存存储读取 List<T> tList = new List<T>();
XML-硬盘存储读取
JSON-硬盘存储读取
Sqlite-轻量数据库(意思就是免安装)-云服务器、硬盘存储读取SQLite 入门教程 - 菜鸟教程
Mysql-关系型数据库(需安装本地或云服务器)-云服务器、硬盘存储读取
Redis-非关系型数据库-轻量级免安装-云服务器、硬盘存储读取
Oracle-系型数据库(需安装本地或云服务器)-云服务器、硬盘存储读取
......

using System.Collections;
using System;
using System.Collections.Generic;
using UnityEngine;[CreateAssetMenu(menuName = "Leoyang/DataUnity", fileName = "CreatData")]
public class PackageTable : ScriptableObject
{public List<ObjectInformation> DatatList=new List<ObjectInformation>();
}
[System.Serializable]
public class ObjectInformation
{public string name;public int ID;public string DescriptObj;
}
这段代码是针对 Unity 引擎的脚本,用于创建包含物品信息的数据表。
1. CreateAssetMenu 属性:
这个属性是 Unity 引擎的特殊标记,用于在 Unity 菜单中创建该类型的对象。`menuName` 指定了在菜单中的位置,`fileName` 指定了在创建对象时的默认文件名。
[CreateAssetMenu(menuName = "Leoyang/DataUnity", fileName = "CreatData")]
代码效果:

2. `PackageTable` Unity 内置类:
PackageTable` 类继承自 `ScriptableObject`,这是一个 Unity 提供的特殊类,可以在编辑器中创建和管理数据。
List<ObjectInformation> DatatList` 是一个包含 `ObjectInformation` 对象的列表,用于存储ObjectInformation类型的物品信息。
3. ObjectInformation 自定义类:
ObjectInformation`是一个用于存储单个物品信息的自定义类。
它包含了物品的名称 (`name`)、ID (`ID`) 和描述 (`DescriptObj`) 等字段,用于描述和标识不同的游戏物品。

这段代码的作用是创建一个可以在 Unity 编辑器中创建和管理的数据表,其中可以存储多个物品的信息,比如名称、ID 和描述等。通过 `PackageTable` 类的 `DatatList` 可以轻松地添加、编辑和删除 `ObjectInformation` 类的对象,这些对象可以在游戏中使用,比如用于管理背包物品或者游戏中的其他数据。
创建完毕后就可以使用了,存储信息


4.ScriptableObject类详细讲解
`ScriptableObject` 是 Unity 引擎中的一个特殊类,它允许在编辑器中创建可序列化的对象,用于存储数据、配置游戏资源、或者创建自定义编辑器工具等。下面详细介绍它的属性、功能和一个简单的案例:
- **可序列化:** `ScriptableObject` 类的对象可以被序列化和存储在 Unity 资源文件中,能够在不同场景和关卡之间进行持久化。
- **无需挂载到 GameObject:** 与 MonoBehaviour 不同,ScriptableObject 并不需要附加到场景中的游戏对象上,因此它们不受场景的影响,更适合用于存储数据或资源。
### 功能:
- **数据存储和配置:** 可以用来保存游戏的数据,例如存储关卡信息、物品属性、对话内容等。也可用于配置资源,如配置文件、技能数据、AI行为树等。
- **可编辑:** 可在 Unity 编辑器中创建、编辑和管理对象的属性和数据。这使得开发人员可以方便地调整数据而无需直接修改代码。
- **易于扩展:** 可以创建自定义编辑器工具,利用 `ScriptableObject` 创建可重复使用的资源,提高了代码的复用性。
### 案例:
以下是一个简单的 `ScriptableObject` 示例,演示了如何创建和使用它:
using UnityEngine;[CreateAssetMenu(fileName = "NewCharacterData", menuName = "Character Data")]
public class CharacterData : ScriptableObject
{public string characterName;public int health;public int attackDamage;public Sprite characterSprite;
}
- 这个示例中的 `CharacterData` 类继承自 `ScriptableObject`。
- 使用 `[CreateAssetMenu]` 属性,指定了在 Unity 菜单中创建该类型对象时的位置和名称。
- `CharacterData` 类定义了一些角色的属性,如角色名、生命值、攻击伤害和角色的精灵图像。
通过这种方式,可以在 Unity 编辑器中创建名为 Character Data 的资源文件,包含了角色的属性信息。然后可以在游戏中通过引用这些 `CharacterData` 对象来获取或配置角色属性,例如在游戏中创建角色、设置角色的生命值和攻击力等。
一旦你创建了 `ScriptableObject` 类型的数据对象并设置了其中的属性,你可以通过代码在游戏中访问这些属性。以下是一种简单的方法:
假设你已经创建了一个名为 `CharacterData` 的 `ScriptableObject` 类,里面包含了角色的属性,比如:
using UnityEngine;[CreateAssetMenu(fileName = "NewCharacterData", menuName = "Character Data")]
public class CharacterData : ScriptableObject
{public string characterName;public int health;public int attackDamage;public Sprite characterSprite;
}
然后,在你的代码中,你可以通过如下方式获取这些数据:
public class CharacterManager : MonoBehaviour
{public CharacterData characterData; // 这个是你创建的 CharacterData 对象void Start(){// 示例:输出角色的名字和生命值Debug.Log("Character Name: " + characterData.characterName);Debug.Log("Character Health: " + characterData.health);// 可以根据需要使用角色数据做其他操作,比如改变角色的属性、加载对应的角色模型等。}
}
这段代码展示了如何在 `CharacterManager` 类中获取 `CharacterData` 对象的属性。通过将 `CharacterData` 对象赋值给 `characterData` 属性,你可以在 `Start` 或其他需要的地方访问其中的属性。可以根据具体需求,使用这些数据来配置游戏中的角色属性、加载对应的精灵图像或者其他处理。
相关文章:
[Unity数据管理]自定义菜单创建Unity内部数据表(ScriptableObject)
Unity 在开发的时候如果数据量比较大,或者一部分数据需要存在云端,那么就需要一些数据库 轻量型到大型的包括: 数组-内存存储读取 列表-内存存储读取 List<T> tList new List<T>(); XML-硬盘存储读取 JSON-硬盘存储读取 …...
使用JAVA语言写一个排队叫号的小程序
以下是一个简单的排队叫号的小程序,使用JAVA语言实现。 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class NumberingSystem {public static void main(String[] args) {Queue<String> queue new LinkedList<…...
openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表
文章目录 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表140.1 相关概念140.2 操作步骤140.3 维护建议 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表 为了保证数据库的有效运行,数据库必须在插入/删除操作后,基于…...
ubuntu20.04使用LIO-SAM对热室空间进行重建
一、安装LIO-SAM 1.环境配置 默认已经安装过ros sudo apt-get install -y ros-Noetic-navigation sudo apt-get install -y ros-Noetic-robot-localization sudo apt-get install -y ros-Noetic-robot-state-publisher 安装 gtsam(如果是18.04的ubuntu直接按照官网配置&…...
如何选学生用的台灯?眼科专家都说好的学生台灯分享!
根据中国眼健康白皮书显示,我国儿童青少年近视总体发生率为53.6%,由此可见如今青少年学生近视的发病率非常高的,且越来越向低龄化发展,不少还在小学阶段的孩子也存在近视的现象。 而造成这个现象的主要原因就是长时间的用眼导致的…...
Linux4.8、环境变量续
个人主页:Lei宝啊 愿所有美好如期而遇 前言 如果对环境变量没有基本的理解,那么建议先看完这篇文章:环境变量https://blog.csdn.net/m0_74824254/article/details/134661113?spm1001.2014.3001.5501 环境变量与本地变量区别 使用export设…...
PTA 7-231 买文具
某小学要购置文具。批发市场中 A 牌的铅笔卖 5 元一支,C 牌的铅笔卖 2 元一支,D 牌的简易铅笔卖1元2只(捆绑销售,只能买偶数只)。 如果想用n元买n支笔,问有多少种买法?(题目保证 n …...
GPTs每日推荐--生化危机【典藏版】
今天给大家推荐一个游戏性质的GPTs,叫做生化危机典藏版,国内点击可玩。 开篇:玩家从末日中醒来。 选择:玩家会遇到各种资源、任务、剧情,需要自行选择相关的分支剧情,一旦选错,无法重选。 结局…...
jenkins-cicd基础操作
1.先决条件 1.首先我个人势在k8s集群中创建的jenkins,部署方法搭建 k8s部署jenkins-CSDN博客 2.安装指定插件. 1.Gitlab plugin 用于调用gitlab-api的插件 2.Kubernetes plugin jenkins与k8s进行交互的插件,可以用来自动化的构建和部署 3.Build Authorizatio…...
ctfhub技能树_web_信息泄露
目录 二、信息泄露 2.1、目录遍历 2.2、Phpinfo 2.3、备份文件下载 2.3.1、网站源码 2.3.2、bak文件 2.3.3、vim缓存 2.3.4、.DS_Store 2.4、Git泄露 2.4.1、log 2.4.2、stash 2.4.3、index 2.5、SVN泄露 2.6、HG泄露 二、信息泄露 2.1、目录遍历 注࿱…...
使用Docker本地部署chatgpt
GitHub上有一个开源的工程ChatGPT-Next-Web,这个工程已经封装好了UI以及和OpenAI的API之间的交互,你要做的事情就是把他部署到本地,并配置好你的OpenAI的sk,然后就可以使用了。那么接下来的文章里,我会手把手教你如何C…...
SpringBoot 集成Netty、WebSocket,5分钟搭建聊天通信系统
文章目录 前言Netty简介使用Netty开发WebSocket应用程序开始项目一、添加依赖二、自定义处理器三、初始化通道加载器四、配置启动器五、添加启动监听器六、启动项目七、演示效果1. 客户端1看到其他客户端上线2. 客户端3收到客户端1发送的消息3. 客户端1收到客户端2下线前言 在…...
LeedCode刷题---双指针问题
顾得泉:个人主页 个人专栏:《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂,年薪百万! 双指针简介 常见的双指针有两种形式,一种是对撞指针,一种是左右指针。 对撞指针:一般用于顺序结构中&…...
使用Notepad++编辑器,安装AnalysePlugin搜索插件
概述 是一款非常有特色的编辑器,Notepad是开源软件,Notepad中文版可以免费使用。 操作步骤: 1、在工具栏 ->“插件”选项。 2、勾选AnalysePlugin选项,点击右上角“安装”即可。 3、 确认安装插件 4、下载插件 5、插件已安装…...
胶囊网络实现手写数字分类
文章目录 前言一、完整代码二、修改成自己的数据集总结 前言 胶囊网络的概念可以先行搜索。 一、完整代码 import torch import torch.nn.functional as F from torch import nn from torchvision import transforms, datasets from torch.optim import Adam from torch.util…...
Java零基础-if条件语句
前言 条件语句是编程语言中最基础也是最常用的语句之一,对于初学者来说,掌握好条件语句是学习编程的第一步。本文将以Java开发语言为例,详细介绍Java中的if条件语句及其应用场景。 摘要 本文主要包含以下内容: Java中的if条件…...
中国证券交易所有哪些
中国一共有五个证券交易所,分别是: 1、上海证券交易所。 上海证券交易所,简称为上交所。 ①成立时间:上交所成立于1990年11月26日,同年12月19日开业。 ②规模:截至2020年末,沪市上市公司家数…...
欢迎回到 C++ - 现代 C++(心得-壹)
原文链接欢迎回到 C - 现代 C | Microsoft Learn 这里先是讲了现代c的优势,其相对于其他编程语言有快速、高效。 相对于其他语言,该语言更加灵活,跨平台(硬件平台)性也很强,可以直接访问硬件,虽…...
【Vue3+Ts项目】硅谷甄选 — 搭建后台管理系统模板
一、 项目初始化 一个项目要有统一的规范,需要使用eslintstylelintprettier来对我们的代码质量做检测和修复,需要使用husky来做commit拦截,需要使用commitlint来统一提交规范(即统一提交信息),需要使用pre…...
MATLAB 系统辨识 - 在线估计 - Online Estimation
系列文章目录 MATLAB 模型参考自适应控制 - Model Reference Adaptive Control MATLAB 自抗扰控制 - Active Disturbance Rejection Control 文章目录 系列文章目录前言一、在线参数估计二、使用步骤 前言 在线估计(Online estimation)算法是在物理系…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
