为什么要使用SerializeField?

企鹅皇帝

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

为什么和何时使用[SerializeField]

[SerializeField]在我的统一界面中尽管使用留下更多的文本框,但仍对变量进行硬编码会不好吗?

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

程序员

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

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

SerializeField当需要变量private但又希望它显示在编辑器中时,可以使用该属性

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

private float score;

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

[SerializeField]
private float score;

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


请注意,private与Unity相比变量与C#的关系更大。也有公共变量变量。标记变量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变量的唯一方法是将变量重命名为其他名称或从编辑器中重置它。即使您从脚本中将值更改为5to 3它也不会更改必须从编辑器重命名或重置它。值得知道,但是当您习惯Unity时,就不必为此担心。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章