U4S2L3——ScriptableObject 非持久数据

本章代码关键字

1
ScriptableObject.CreateInstance<>()    //在运行时创建出指定继承ScriptableObject的对象,该对象只存在于内存当中,可以被GC

ScriptableObject的非持久化数据

ScriptableObject的非持久化数据指的是,不管在编辑器模式还是在发布后都不会持久化的数据
我们可以根据自己的需求随时创建对应数据对象进行使用,就好像直接new一个数据结构类对象

利用ScriptableObject生成非持久化的数据

利用ScriptableObject​中的静态方法CreateInstance<>()
该方法可以在运行时创建出指定继承ScriptableObject​的对象
该对象只存在于内存当中,可以被GC
调用一次就创建一次

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using UnityEngine;

public class Lesson3 : MonoBehaviour
{
public MyData data;

void Start()
{
//通过类名来获取
//data = ScriptableObject.CreateInstance("MyData") as MyData;
//通过泛型来获取
data = ScriptableObject.CreateInstance<MyData>();
data.PrintInfo();
}
}

通过这种方式创建出来的数据对象,
它里面的默认值,将不会受到脚本中设置的影响这意味着你在Inspector窗口为脚本变量拖曳关联的对象在这里都是空
(右图的值都是不是脚本设置的默认值)

image

ScriptableObject的非持久化数据存在的意义

当你只是希望在运行时能有一组唯一的数据可以使用,但是这个数据又不太希望保存为数据资源文件浪费硬盘空间
那么ScriptableObject的非持久化数据就有了存在的意义
它的特点是:只在运行时使用,在编辑器模式下也不会保存在本地