博客站点静态镜像

0%

Unity Engine的ScriptableSingleton

ScriptableSingleton 是我最近不小心发现的一个类,它位于UnityEditor namespace,但是并没有出现在官方的文档上。

于是,好奇心来了。经过一系列的琢磨和查阅资料,发现它可能是用于编辑器内部记录数据的一个功能(能不能保存数据还不知道)


比方说,我们有两个编辑器窗口,同时需要一个数据,那我们可以把它直接记录在一个变量或者property上。

1
2
3
4
5
6
7
namespace Nekonya.Example
{
public static class Demo
{
public static bool User_Is_A_Cat { get; set; }
}
}

然后你可以在需要它的地方这么调用它:var b_cat = Demo.User_Is_A_Cat;

但是这时候就有个问题:这些数据很容易丢失。

比如说你改了同项目中的某个其他的代码,触发了Unity的代码重编译,然后你存放在这里的数据就没了。


那这种时候,就可以用ScriptableSingleton 这个小功能来记录数据了。我们写一个这样的类:

1
2
3
4
5
6
7
namespace Nekonya.Example
{
public class UserInfo : UnityEditor.ScriptableSingleton<UserInfo>
{
public bool User_Is_A_Cat { get; set; }
}
}

然后,如果我们要使用它的值的话,就直接访问ScriptableSingleton里面的instance就可以了。

1
2
3
4
5
6
7
8
9
10
namespace Nekonya.Example
{
public class TryGetData
{
void Meow()
{
var b_cat = ScriptableSingleton<UserInfo>.instance.User_Is_A_Cat;
}
}
}

这样一来,编辑器下的数据就不会丢失了。