Unity: Use [SerializeField] and [Serializable] properties to control class serialization
By default Unity serializes supported public fields and ignores all private fields. You can control that behavior using [SerializeField] and [Serializable] attributes.
[SerializeField] private int accumulator; // it will be serialized too!You can also do the opposite – having a public field, but its value shouldn’t be stored.
[NonSerialized] public float currentHealth;
If you want to create a custom inner type (inside another class) and serialize it inside it, you must add to it a [Serializable] attribute.
class World : MonoBehaviour {
public Bot[] bots;
[Serializable]
public class Bot {
public string name;
public int health = 100;
[SerializeField] // you can use it here too!
private int somethingHidden = 5;
}
}
Please refer to the Unity3D documentation to read more about [SerializeField], its limitation, and possibilities.