Warum hat C# mit [System.Serializable] für die Aufbewahrung Instanz? (Unity3D)

Wollte ich ein Programm, wenn es einen TextAsset von inspector(es ist in 'ExampleEditor'), benutzerdefinierte Daten-Instanz für die Verwendung blendshape Animations.

Zuerst machte ich meine eigenen Daten Klasse nicht über [System.Serializable].

public class Matrix {
    public int row;
    public int col;
    public double[,] mat;
}

Meine Strategie war eine TextAsset, parsing string aus TextAsset und schließlich die Herstellung einer Matrix-Instanz eine Feld-variable in 'Beispiel.cs'. Ich dachte, wenn es initialisiert wurde, und der zuerst zugeordnete, ich war in der Lage, verwenden Sie die variable im Beispiel-Instanz. Jedoch, Es hat nicht funktioniert, Es warf 'NullReferenceException'.

So fand ich die Lösung mit '[System.Serializable]'. Es hat funktioniert. (und ich wusste, dass Unity3D nicht bieten multi-dimensionale array für Ihre serialisierungsmethode.)

using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;

[System.Serializable]
public class Matrix {
    [System.Serializable]
    public class mRow {
        public List<float> aRow = new List<float>();
    }

    [HideInInspector]
    [SerializeField]
    public int row;

    [HideInInspector]
    [SerializeField]
    public int col;

    //[HideInInspector]
    [SerializeField]
    public List<mRow> mat = new List<mRow>();
}

Schließlich, ich weiß die Lösung, Aber ich weiß nicht, warum dieses problem war passiert. Es ist mit GC?

Diese Frage erscheint nicht sinnvoll? Das serializable-Attribut lediglich informiert den compiler, dass das betreffende Objekt serialisiert werden kann. Eigenschaften, die nicht markiert sind, werden nicht serialisiert. Es ist schwierig zu wissen, was Sie versuchen zu erreichen / was das problem ist, genau aus dieser Beschreibung.

InformationsquelleAutor user1732445 | 2013-07-27

Schreibe einen Kommentar