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はシーンに保存された値を何も通知せずに破棄します。エラーで知らせてくれることなく、フィールドの値はコード内の数値に戻ります。
チャレンジ
簡単ランプの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);
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。