在 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 { }
我知道这是可以做到的,因为很棒的插件 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 { }