Menu
CoddyTech

SerializeField

CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 15/85。

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

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

[SerializeField] private float range = 5f;

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

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

challenge icon

チャレンジ

簡単

他のスクリプトからランプの高さを隠しつつ、インスペクターには表示したままにします。

  1. フィールドを [SerializeField] private float height = 1f; に変更します。
  2. Start() はそのままにします。インスペクターで height に 4 を設定します。

「プレイ」を押します。ランプは引き続き高さ 4 の位置に吊り下がっています。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

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

    void Start()
    {
        transform.position = new Vector3(0, height, 0);
    }
}

Unityスクリプトの基礎のすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド