2017-12-11 2 views
0

でクラスをシリアル化するために、私は私の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の図書館内にある場合は可能ですか?そうでない場合は、どうやってそれを内部と外部の実現で分けることが可能か?

+0

何にシリアル化しますか? Json?バイナリ? – Programmer

+0

@Programmer、私はちょうど私のスクリプトでプレハブを作るために自分のゲームオブジェクトをドラッグするときに、私のスクリプトはそのフィールドの価値を失うことはありません –

+0

あなたは 'ISerializable'を実装し、'ベジエ 'あなた自身の詳細。 – Draco18s

答えて

0

Unityでプロパティをシリアル化することはできません。プライベートフィールドに格納し、プロパティゲッターで公開することを検討してください。

また、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; } } 
関連する問題