Unity Engine的ScriptableSingleton

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

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


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

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 这个小功能来记录数据了。我们写一个这样的类:

namespace Nekonya.Example
{
    public class UserInfo : UnityEditor.ScriptableSingleton<UserInfo>
    {
        public bool User_Is_A_Cat { get; set; }
    }
}

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

namespace Nekonya.Example
{
    public class TryGetData
    {
        void Meow()
        {
            var b_cat = ScriptableSingleton<UserInfo>.instance.User_Is_A_Cat;
        }
    }
}

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

yomunsam

文章作者信息...

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

推荐ヾ(•ω•`)o