Serializableとは??
クラスをシリアル化できることを示す属性です。
Unityで使用すると、インスペクターに サブプロパティを埋め込むことができるようになります。
Unityリファレンス
Microsoftリファレンス
どんな風に使う??
- 例えば、以下のような形でCharacterクラス(キャラクターのクラス)とStatusクラス(ステータスのクラス)でクラスを分けて、以下のような形で定義します。
- この際、StatusクラスにSerializable属性 を付与します。
Status.cs
using UnityEngine;
using System;
namespace QiitaGame
{
[Serializable]
public class Status
{
[SerializeField]
private int _hp;
[SerializeField]
private int _mp;
[SerializeField]
private int _attackPower;
[SerializeField]
private int _defensePower;
public int Hp { get => _hp; set => _hp = value; }
public int Mp { get => _mp; set => _mp = value; }
public int AttackPower { get => _attackPower; set => _attackPower = value; }
public int DefensePower { get => _defensePower; set => _defensePower = value; }
}
}
Character.cs
using UnityEngine;
namespace QiitaGame
{
public class Character : MonoBehaviour
{
[SerializeField]
private Status _status;
public Status Status { get => _status;}
}
}
- Characterクラス(コンポーネント)をヒエラルキー上のオブジェクトにアタッチすると、インスペクタに以下のように表示されます。
- 「Status」の▷をクリックして展開すると・・・
- サププロパティが展開されましたね!