Unity中HideInInspector和SerializeField

2015年03月20日 11:46 0 点赞 0 评论 更新于 2025-11-21 17:44

在Unity开发中,HideInInspectorSerializeField 是两个非常实用的特性,它们主要用于控制变量的序列化和在Inspector面板中的显示情况。下面我们来详细了解一下这两个特性。

序列化的基本概念

在Unity里,会自动对Public变量进行序列化。序列化指的是,当再次加载Unity项目时,这些被序列化的变量会保留之前赋的值,无需再次手动赋值,因为它们已经被保存下来了。而在Inspector面板上显示的值,需要满足已经被序列化且没有使用 HideInInspector 标记这两个条件。

HideInInspector 特性

[HideInInspector] 特性的作用是将原本会显示在Inspector面板上的序列化值隐藏起来。

SerializeField 特性

[SerializeField] 特性可以让原本不会被序列化的私有变量和保护变量实现序列化。这样,在下次加载时,这些变量会保留上次赋的值。

不同场景下的使用示例

公有序列化变量

希望在面板中看到变量

如果变量 a 是公有的序列化变量,并且你希望在Inspector面板中看到它,可以这样声明:

public int a;

不希望在面板中看到变量

若不想在面板中看到变量 a,可以使用 [HideInInspector] 特性:

[HideInInspector] public int a;

这样,变量 a 可以在程序中通过代码进行赋值,但不会在Inspector面板中显示,也就无法手动设置其值。

私有序列化变量

希望在面板中读取并保存

如果变量 a 是私有的序列化变量,并且你希望在Inspector面板中读取并保存它的值,可以使用 [SerializeField] 特性:

[SerializeField] private int a;

希望在面板中读取但不保存

若想在面板中读取变量 a 的值,但不保存它,可以结合使用 [HideInInspector][SerializeField] 特性,并通过属性来访问该变量:

[HideInInspector][SerializeField]
private int a;
public int b
{
get { return a; }
}

然后在Editor脚本中显示该值:

EditorGUILayout.LabelField("value", game.B.ToString());

不想在面板中做任何操作但在程序中赋值

如果变量 a 是私有序列化变量,你既不想在面板中看到它,也不想在面板中对其进行写入操作,但希望在程序中给它赋值,可以这样做:

[HideInInspector][SerializeField]
private int a;
public int b
{
get { return a; }
set { a = value; }
}

通过合理使用 HideInInspectorSerializeField 特性,我们可以更灵活地控制变量的序列化和在Inspector面板中的显示,从而提高开发效率。

作者信息

menghao

menghao

共发布了 3994 篇文章