如何序列化自定义库

时间:2017-12-11 23:40:58

标签: c# unity3d dll

我的C#库中有一个类:

public class PositiveLayer : MonoBehaviour
{
    [SerializableField]
    internal BezierPoint[] Bezier { get; private set; }

    public PositiveLayer()
    {
        Bezier = new BezierPoint[0];
    }

    [Serializable]
    public class BezierPoint
    {
        public Vector2 Target;
        public Vector2 Tangent;
    }
}

Unity3D可以在我的库中看到这个类,并允许像组件一样添加到场景中的某个GameObject。但它在预制件中失去了一个状态。如何为C#库(.DLL)中的类提供序列化?
如何将这些类更改为Unity3D的编辑器可以制作正确的预制件以保存此脚本状态?如果我的班级位于.dll库内,是否可能?如果不是,我怎么能在内部和外部实现中将它分开呢?

1 个答案:

答案 0 :(得分:0)

您无法使用Unity序列化属性。考虑将其存储在私有字段中,并使用您的属性getter公开它。

此外,您不能将构造函数与MonoBehaviours一起使用。考虑使用Awake()方法进行初始化。请注意,如果将构造函数代码移动到Awake,它将覆盖序列化值。

[SerializableField]
//default value if there is no serialized value available.
private BezierPoint[] bezier = new BezierPoint[0];

internal BezierPoint[] Bezier { get { return bezier; } }