在 Unity 的 ScriptableObject 中序列化脚本实例

Serialize Script Instance in a ScriptableObject in Unity

我知道这是可以做到的,因为很棒的插件 Odin 有一些史诗般的序列化工具。

我希望我可以使用 Odin 做到这一点,但即使他们的 [Serialize] 标签也不起作用。

我想在 Scriptable Object 中序列化一个新的脚本实例。

使用 Odin,您可以序列化字典,如果您序列化包含接口(脚本)实例的字典,它允许您在字典中创建该脚本的新实例,如下所示:

由于可以将脚本实例存储在字典中,我很好奇如何单独完成此操作。

我要保存的脚本是一个只有函数和一个空构造函数的通用脚本。

您知道为什么要在 ScriptableObject 中序列化接口(脚本)的实例吗?

理想情况下,我可以创建一个属性,然后强制它像这样序列化:

public class MyClass: MonoBehaviour
{
    [ForceSerialize]
    public IScript scriptToSerialize;

}

然后在检查器中,我只需单击该框并创建该脚本的新实例以附加到 object。

您不需要任何 [Serialize] 标记,MyClass 只需继承 Sirenix.OdinInspector.SerializedMonoBehaviour 而不是 MonoBehaviour。 需要使用这些 "Serialized" class(对于 ScriptableObjects 等也存在)才能使 Odin 的自定义序列化工作,这将使您的字段出现在检查器中。

这个脚本适合我:

using Sirenix.OdinInspector;

public class MyScript : SerializedMonoBehaviour
{
    public IScript scriptToSerialize;
}

public interface IScript { }