MRが楽しい

MRやVRについて学習したことを書き残す

SerializeField属性またはHideInInspector属性を使ってフィールドをInspector上に表示する

本日はUnityの小ネタ枠です。
SerializeField属性またはHideInInspector属性を使ってフィールドをInspector上に表示する方法です。

SerializeField属性

SerializeField属性はprivateフィールドを強制的にシリアライズします。
これにより、privateフィールドでもInspectorビュー上で値を設定できるようになります。
docs.unity3d.com

using UnityEngine;

public class SerializeTest : MonoBehaviour
{
    // privateフィールドはInspector上で表示されない
    private string privateField;
    
    // SerializeField属性を付与するとprivateフィールドでもInspector上で表示される
    [SerializeField]
    private string serializeField;
    
    // 実行処理
}


HideInInspector属性

HideInInspector属性はpublicフィールドをInspectorビュー上に表示しないようにします。
docs.unity3d.com

またはSystem.NonSerialized属性を使ってpublicフィールドをシリアライズしないことでInspectorビュー上に表示しないようにできます。
docs.unity3d.com

using UnityEngine;

public class NonSerializeTest : MonoBehaviour
{
    // publicフィールドはシリアライズされてInspector上で表示される
    public string publicField;
    
    // HideInInspector属性を付与するとシリアライズされるがInspector上では表示されない
    [HideInInspector]
    public string hideInInspectorField;
    
    // NonSerialized属性を付与するとシリアライズされないためInspector上で表示されない
    [System.NonSerialized]
    private string nonSerializeField;
    
    // 実行処理
}


HideInInspector属性とSystem.NonSerialized属性の違い

HideInInspector属性はフィールドを非表示にするだけなので何らかの形で値を一度入力すると値を保持し続けます。
System.NonSerialized属性はシリアライズされないため、値を保持し続けません。