Menu
CoddyTech

SerializeField

CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 8/67。

publicフィールドは一度に2つの役割を果たします。Inspectorに表示され、ほかのすべてのスクリプトから読み取り・変更できます。多くの場合、必要なのは前者だけです。privateフィールド(C#ではデフォルト)は、そのクラス自身からしか変更できないため、ほかのスクリプトによって変更されることはありませんが、UnityはInspectorに表示しません。

[SerializeField]を使うと、privateフィールドもUnityに保存・表示させることができます。このタレットの射程はInspectorでタレットごとに設定でき、ほかのスクリプトからは変更できません。

[SerializeField] private float range = 5f;

void Start()
{
    Debug.Log("Range: " + range);
}

ほとんどのUnityコードでは、このように設定をprivateにして、[SerializeField]を付けます。逆のケースには注意しましょう。フィールドをprivateにして属性を付け忘れると、Unityはシーンに保存された値を何も通知せずに破棄します。エラーで知らせてくれることなく、フィールドの値はコード内の数値に戻ります。

challenge icon

チャレンジ

簡単

ランプのheightはpublicなので、どのスクリプトからでも動かすことができます。heightをprivateにしつつ、Inspectorで設定できるようにして、値を4にします。ランプは引き続きInspectorで設定した高さに吊り下がっていなければなりません。

Playを押してランプの高さを確認し、それからCheckを押してください。

自分で試してみよう

using UnityEngine;

public class LampHeight : MonoBehaviour
{
    public float height = 1f;

    void Start()
    {
        transform.position = new Vector3(0, height, 0);
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Unityスクリプティングの基礎のすべてのレッスン