[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)算法是在物理系…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
 
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
 
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
 
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
 
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
 
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
 
RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema,不需要复杂的查询,只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 :在几秒钟…...
