簡體   English   中英

在Unity3D中聲明類屬性的最佳方法

[英]Best way to declare class properties in Unity3D

我是Unity 3D開發的新手,我想知道什么是聲明稍后從編輯器分配的類的屬性的最佳方法。 我主要看到兩個:

public class MyObject : MonoBehavour {

    public GameObject relatedObect;

}

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

}

我知道它是第二種形式,因為封裝是保持的,但我不確定。

請在示例中考慮您聲明的類字段 ,而不是屬性 他們都是一個班級的成員,但他們是完全不同的。

為了這個答案,我將專注於你的例子,所以我將談論領域。

public[SerializeField] private允許您在Unity Inspector中注入一個值,但它們在腳本中的行為方式不同。

1 - 公共領域

當您希望從另一個類使用或設置公共字段時,可以聲明該字段。 這種選擇與封裝相反,因為其他腳本可能會訪問它。 如果您需要可訪問該字段,它仍可能是預期的行為。

2 - [SerializeField]私有字段

如果要在檢查器中設置項目,但是不希望其他類看到它,則使用此選項。 此選項更適合封裝,因為這樣沒有其他腳本可以訪問或更改此字段。

如果你想“正確地”做事,那么第二種方法就是去。 但遺憾的是,有一個“錯誤”會通過編輯器向您設置的每個私人發出警告。 我在github上看到它最終得到修復,但在此期間如果要刪除警告,可以將變量置於pragma warning disable 0649pragma warning restore 0649

除了Jack Mariani的回答,我想提一下RangeAttributeHideInInspectorAttribute


[Range (min, max)]

如果有一個,檢查員將顯示一個滑塊而不是一個數字。 您移動滑塊並且值在指定范圍內更改。

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

文檔


[HideInInspector]

當您希望公共變量顯示在檢查器中時(默認顯示它們),您應該使用它:

[HideInInspector] public float X;

文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM