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に慣れれば、このことを心配する必要はありません。
[SerializeField]属性はnon-publicフィールドをシリアル化可能としてマークするために使用されます。これにより、Unityはこれらの値を保存およびロードできます(すべてのパブリックフィールドはデフォルトでシリアル化されます)。
それだけです。あなたがそれをしたいときにそれを使用します。