我是Unity 3D开发的新手,我想知道什么是声明类的属性的最佳方法,稍后再从编辑器中进行分配。 我主要看到两个:
public class MyObject : MonoBehavour {
public GameObject relatedObect;
}
和
public class MyObject : MonoBehavour {
[SerializeField]
private GameObject relatedObect;
}
我知道这是第二种形式,因为可以保留封装,但是我不确定。
答案 0 :(得分:3)
请注意,在该示例中,您声明了类fields,而不是properties。 他们都是班上的一员,但是却完全不同。
为了这个答案,我将重点关注您的示例,因此我将讨论字段。
public
和[SerializeField] private
都允许您在Unity Inspector中插入一个值,但是它们在脚本中的行为不同。
您希望在其他类中使用或设置公共字段时声明它。此选择与封装背道而驰,因为其他脚本可能会访问它。如果您要求该字段可访问,则仍然可能是预期的行为。
要在检查器中设置项目时使用此选项,但不希望其他类看到它。此选项更适合封装,因为通过这种方式,其他脚本无法访问或更改此字段。
答案 1 :(得分:0)
第二种是您要“正确”做事的方法。但是不幸的是,有一个“错误”会向您通过编辑器设置的每个私有警告。我在github上看到它终于得到修复,但是与此同时,如果要删除警告,可以将变量放在pragma warning disable 0649
和pragma warning restore 0649
答案 2 :(得分:0)
除了杰克·马里亚尼(Jack Mariani)的答案,我还要提及RangeAttribute
和HideInInspectorAttribute
。
[Range (min, max)]
如果有一个,检查器将显示一个滑块而不是一个数字。您移动滑块,值将在指定范围内变化。
[SerializeField] [Range (0, 5)] private float _speed;
[HideInInspector]
当您不不希望在检查器中显示公共变量(默认情况下显示)时,应使用它:
[HideInInspector] public float X;