在Unity3D中声明类属性的最佳方法

时间:2019-06-27 06:56:12

标签: c# unity3d

我是Unity 3D开发的新手,我想知道什么是声明类的属性的最佳方法,稍后再从编辑器中进行分配。 我主要看到两个:

public class MyObject : MonoBehavour {

    public GameObject relatedObect;

}

public class MyObject : MonoBehavour {
    [SerializeField]
    private GameObject relatedObect;

}

我知道这是第二种形式,因为可以保留封装,但是我不确定。

3 个答案:

答案 0 :(得分:3)

请注意,在该示例中,您声明了类fields,而不是properties。 他们都是班上的一员,但是却完全不同。

为了这个答案,我将重点关注您的示例,因此我将讨论字段。

public[SerializeField] private都允许您在Unity Inspector中插入一个值,但是它们在脚本中的行为不同。

1-公共领域

您希望在其他类中使用或设置公共字段时声明它。此选择与封装背道而驰,因为其他脚本可能会访问它。如果您要求该字段可访问,则仍然可能是预期的行为。

2-[SerializeField]私有字段

要在检查器中设置项目时使用此选项,但不希望其他类看到它。此选项更适合封装,因为通过这种方式,其他脚本无法访问或更改此字段。

答案 1 :(得分:0)

第二种是您要“正确”做事的方法。但是不幸的是,有一个“错误”会向您通过编辑器设置的每个私有警告。我在github上看到它终于得到修复,但是与此同时,如果要删除警告,可以将变量放在pragma warning disable 0649pragma warning restore 0649

之间

答案 2 :(得分:0)

除了杰克·马里亚尼(Jack Mariani)的答案,我还要提及RangeAttributeHideInInspectorAttribute


[Range (min, max)]

如果有一个,检查器将显示一个滑块而不是一个数字。您移动滑块,值将在指定范围内变化。

[SerializeField] [Range (0, 5)] private float _speed;

Documentation


[HideInInspector]

当您不希望在检查器中显示公共变量(默认情况下显示)时,应使用它:

[HideInInspector] public float X;

Documentation