web-dev-qa-db-ja.com

なぜSerializeFieldを使用する必要があるのですか?

C#とUnityの学習を始めたばかりですが、慣れないことが1つあります。

[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変数をエディターに表示したくない場合があります。 [HideInInspector]属性を使用して、public変数を非表示にすることができます。

これはエディターに表示されます:

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に慣れれば、このことを心配する必要はありません。

11
Programmer

[SerializeField]属性はnon-publicフィールドをシリアル化可能としてマークするために使用されます。これにより、Unityはこれらの値を保存およびロードできます(すべてのパブリックフィールドはデフォルトでシリアル化されます)。

それだけです。あなたがそれをしたいときにそれを使用します。