🐈
Unityで[System.Serializable]を使ってMonoBehaviourを継承しないクラスをインスペクターに表示させる術
はじめに
Unityを使っていると、コンポーネントをインスペクターに表示させるためには多くの場合MonoBehaviourを継承する必要があります。しかし、すべてのクラスがMonoBehaviourを継承する必要はありません。この技術記事では、[System.Serializable]属性を活用してMonoBehaviourを継承しないクラスをインスペクター上で扱う方法を紹介します。
[System.Serializable]とは?
[System.Serializable]は、C#で用意されている属性の1つで、クラスがシリアライズ可能であることを指定します。この属性を使用すると、Unityエディターのインスペクター上で、そのクラスのインスタンスを編集可能になります。
[System.Serializable]
public class PlayerData {
public int level;
public string name;
}
使いどころ:MVPパターンの例
MVPパターンにおけるModelは、通常MonoBehaviourを継承しません。Modelはデータやロジックを管理する為、UnityのUIやゲームオブジェクトと直接の関連性を持たないず、Monobehaviourの機能が必要ない場合が多いからです。
実装手順
- MonoBehaviourを継承しておらず、インスペクターに表示したいクラスに[System.Serializable]属性を追加します。
- MonoBehaviourを継承する別のクラスで、そのクラスのインスタンスをpublicなフィールドとして定義します。
これによって、PlayerPresenterのplayerModel変数の中身を、インスペクターに表示させることができます。
[System.Serializable]
public class PlayerModel {
public int level;
public string name;
}
public class PlayerPresenter : MonoBehaviour {
public PlayerModel playerModel;
}
まとめ
[System.Serializable]を活用することで、MonoBehaviourを継承しないクラスをUnityのインスペクターで編集できます。これにより、より綺麗でメンテナンスしやすいコードが書けるようになります。
Discussion