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 会悄悄丢弃场景中保存的值。字段会恢复为代码中的数字,而且不会有任何错误提示。
挑战
简单隐藏灯的高度,避免其他脚本访问,但仍在 Inspector 中保留该属性。
- 将字段改为
[SerializeField] private float height = 1f;。 - 保持
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 在线编辑器