Menu
CoddyTech

SerializeField

本课属于 Coddy Unity 学习旅程的“Unity 脚本基础”单元。第 15 课,共 85 课。

public 字段一举两得:它会显示在 Inspector 中,而且其他脚本都可以读取和修改它。很多时候,你只需要前者。private 字段(C# 中的默认设置)只能由它所属的类修改,因此其他脚本无法破坏它,但 Unity 不会在 Inspector 中显示它。

[SerializeField] 会让 Unity 保存并显示私有字段。这个炮塔的射程在 Inspector 中针对每个炮塔单独设置,其他脚本都无法访问它:

[SerializeField] private float range = 5f;

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

大多数 Unity 代码都会这样保存设置:使用私有字段,并添加 [SerializeField]。反过来也要留意:如果把字段设为私有,却忘了添加这个属性,Unity 会悄悄丢弃场景中保存的值。字段会恢复为代码中的数字,而且不会有任何错误提示。

challenge icon

挑战

简单

隐藏灯的高度,避免其他脚本访问,但仍在 Inspector 中保留该属性。

  1. 将字段改为 [SerializeField] private float height = 1f;。
  2. 保持 Start() 不变:Inspector 会将 height 设置为 4。

按“开始”:灯仍悬挂在高度 4 处。然后按“检查”。

亲手试试

using UnityEngine;

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

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

Unity 脚本基础中的所有课

自己练习: Unity 在线编辑器