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

Unity (编辑器)数据持久化 之 ScriptableObject初识与创建

1.什么是ScriptableObject

ScriptableObject - Unity 手册

如题,一个可以在Unity编辑器中方便编辑数据的工具

一个脚本继承该类,并且序列化或者有公共变量,即可在Inspector窗口看到它们

其特点:

Q:是否可以将 ScriptableObject的数据保存到本地?

A:可以,可以通过Json的序列化与反序列化保存 ScriptableObject的数据

 2.创建一个ScriptableObject文件

2.1 使用CreateAssetMenu(建议)

先继承ScriptableObject!!!!!!!!!!!!!!!!!!!!!!!!

使用CreateAssetMenu创建一个ScriptableObjec配置文件

[CreateAssetMenu(fileName ="文件名" ,menuName ="菜单名",order =0)]

 

示例:

当我的脚本中写了如下变量之后:

  public int a;
  public string b;
  [SerializeField]
  private GameObject c;

该文件就会出现对应的变量

 

总览:

[CreateAssetMenu(fileName ="文件名" ,menuName ="菜单名",order =0)]
public class LearnScripttableObject : ScriptableObject
{
    public int a;
    public string b;
    [SerializeField]
    private GameObject c;
}

 2.2 使用MenuItem

示例: 

public class TextMenuItem : MonoBehaviour
{
    //使用该特性在unity编辑器菜单栏中显示一个手势
    [MenuItem("菜单栏/手势")]
    public static void NewFunc()
    { 
    
    
    
    }
}

之后使用ScriptableObject的静态方法进行创建数据并保存到本地

public class TextMenuItem : MonoBehaviour
{
    //使用该特性在unity编辑器菜单栏中显示一个手势
    [MenuItem("菜单栏/手势")]
    public static void NewFunc()
    {
        //创建实例
        LearnScripttableObject  learnScripttable = ScriptableObject.CreateInstance<LearnScripttableObject>();
        //创建数据源文件       
        AssetDatabase.CreateAsset(learnScripttable,"Assets/Resources/sob数据文件.asset");
        //保存文件
        AssetDatabase.SaveAssets();
        //刷新
        AssetDatabase.Refresh();
    }
}

点击手势就会执行特性下的函数(NewFunc) 

-------------------------------------------------------------------------------------------------------------------------------

拆解: 

 第一行行代码,是abc数据的来源

 LearnScripttableObject  learnScripttable = ScriptableObject.CreateInstance<LearnScripttableObject>();

第二三行代码是在指定路径下保存该文件为指定名字 

 //创建数据源文件       
 AssetDatabase.CreateAsset(learnScripttable,"Assets/Resources/sob数据文件.asset");
 //保存文件
 AssetDatabase.SaveAssets();


 


http://www.kler.cn/a/288290.html

相关文章:

  • QTcpSocket 服务端和客户端
  • 重构开发之道,Blackbox.AI为技术注入智能新动力
  • fastadmin多个表crud连表操作步骤
  • Python 中.title()函数和.lower()函数
  • SpringBoot(十八)SpringBoot集成Minio
  • 优化时钟网络之时钟抖动
  • 微信小程序中Towxml解析Markdown及html
  • 【Eureka】搭建Eureka Server,实现服务注册和服务发现
  • 数据库约束--确保数据完整性
  • 用JS屏蔽网页中的鼠标点击
  • uniapp微信小程序开发测试获取手机号码
  • 研究生深度学习入门的十天学习计划------第七天
  • 【TiDB原理与实战详解】3、 集群升级和逻辑备份恢复~学不会? 不存在的!
  • Elasticsearch:使用 inference API 进行语义搜索
  • 微信小程序开发代码分包
  • redis单线程 ,当redis在执行lua脚本的时候,会执行其他redis操作吗?
  • 解决Springboot项目Maven下载依赖速度慢的问题
  • EmguCV学习笔记 C# 9.3 移动检测类
  • Vue(十二) Vuex、四个map方法的使用、Vuex模块化+namespace命名空间
  • Unity(2022.3.41LTS) - UI详细介绍-InputField(输入字段)
  • 使用golang的AST编写定制化lint
  • 小程序的页面跳转方式
  • C语言遇见的一些小问题
  • 使用实例:xxl-job应用在spring cloud微服务下
  • MySQL——事务与存储过程(三)存储过程的使用(1)调用存储过程
  • Unity(2022.3.41LTS) - 3D动画