ぼっちブログ

個人ゲーム開発者やっています。主に購入したUniyアセットの使用感を書いていきます。

【Unity】プロパティだけどインスペクターで値を設定できるようにする

よく言われる「プロパティもインスペクター上で表示できたらな」ってのをバッキングフィールドを用意して実現します。(要は自動実装プロパティを自前で実装)

using UnityEngine;

public class NewScript : MonoBehaviour
{
    [SerializeField]
    #region public int Value1 { get; }
    private int _value1;
    public int Value1
    {
        get { return _value1; }
    }
    #endregion

    [SerializeField]
    #region public int Value2 { get; private set; }
    private int _value2;
    public int Value2
    {
        get { return _value2; }
        private set { _value2 = value; }
    }
    #endregion

    [SerializeField]
    #region public int Value3 { get; set; }
    private int _value3;
    public int Value3
    {
        get { return _value3; }
        set { _value3 = value; }
    }
    #endregion
}

プロパティをインスペクターに表示

定義を#region~#endregionで囲んでおけば、Visual Studio上だと折りたたまれて表示されるので、見づらいのが少しましになるかも。

#regionを使ってVisual Studio上で折りたたみ表示

(ところで、きっと書籍とかサンプルコードとかの影響だと思うけど、シリアライズしたい値をなんでもかんでもpublicにしちゃいがちなのはよくないと思うんだ……)