为什么要使用SerializeField?

时间:2018-11-07 14:58:23

标签: c# unity3d

我刚刚开始学习C#和Unity,有一件事我不习惯:

为什么和何时应该使用[SerializeField]

尽管使用[SerializeField]仍使变量保持硬编码并且在我的统一界面中有更多文本框,这是否不好?

预先感谢您的关注和耐心。

2 个答案:

答案 0 :(得分:5)

  

为什么以及何时应该使用[SerializeField]?

使用SerializeField属性会使Unity序列化任何private变量。这不适用于C#中的静态变量和属性。

当您需要将变量设为SerializeField并希望其显示在编辑器中时,可以使用private属性。

例如,此不会显示在编辑器中:

private float score;

这是因为它是一个private变量,但是下面的变量应该显示在编辑器中:

[SerializeField]
private float score;

那是因为您对其应用了SerializeField,并且告诉Unity对其进行序列化并将其显示在编辑器中。


请注意,private变量与C#的关系比Unity的更多。还有公共变量变量。标记变量private意味着您不希望其他脚本能够访问该变量。还有public限定词。标记变量public意味着您希望其他脚本能够访问该变量。

有时,您希望其他脚本能够从另一个脚本访问您的变量,但不希望public变量出现在编辑器中。您可以使用public属性隐藏[HideInInspector]变量。

这将显示在编辑器中:

public float score;

不会显示在编辑器中:

[HideInInspector]
public float score;
  

尽管使用[SerializeField]仍将变量保留为硬编码是否不好?   并在我的统一界面中有更多文本框?

是的,尤其是对于新用户而言,这通常是不好的。长期以来,Unity和C#程序员都没什么大不了的。不好的原因是因为当您拥有以下代码时:

[SerializeField]
private float score = 5f;

编辑器中的默认值为5。保存脚本后,该变量现在在编辑器中更新为5。问题是您可以将其从编辑器更改为14。一旦从编辑器中对其进行更改,脚本中的值仍将为5,但是在运行它时,Unity将使用您在编辑器中设置的值为14。这可能会导致您花费大量时间对甚至不是问题的问题进行故障排除,这仅仅是因为在期望使用脚本中设置的默认值的同时,在编辑器中设置了正在使用的其他值。

score变量重置为默认5变量的唯一方法是将变量重命名为其他变量或从编辑器重置它。即使您从脚本中将值从5更改为3,它也不会更改。必须从编辑器重命名或重置它。值得知道,但是当您习惯Unity时,就不必担心这一点。

答案 1 :(得分:3)

[SerializeField]属性用于将非公共字段标记为可序列化:以便Unity可以保存和加载这些值(默认情况下所有公共字段均已序列化),即使它们不是公共的也是如此。 。

仅此而已。您可以在需要时使用它。