Unity++blog.

UnityやC#とかについて学習したことを書いてます

フィールド変数の宣言について( [SerializeField] )

開発初心者のほとんどがフィールド変数の変数の宣言を↓として

f:id:nabesi777:20190123235613p:plain

 

そして、このようにInspector上で数字を弄ったりしていると思います。

f:id:nabesi777:20190123235648p:plain

 

でもそんなのだめだよーって記事を読んで、ふむふむとたまに

[SerializeField] を使って宣言してたりしてましたが、今いちわからず(忘れて)使っていたので記事化。

[SerializeField]を使用して

[SerializeField] private float _thrust; と

フィールド変数を宣言するとpublicで宣言した時と同様にInspector上で数値の変更などができます。

これはpublic で宣言した時と同じです。

 

つまりフィールド変数に[SerializeField]をつければ、アクセス修飾子をpublicとしなくてprivateでもInspectorから値の変更ができるとメリットがあるということのようです。

 

個人開発からすると、コードが長くなるだけであんまりメリットがなさそうですが、このように宣言することにより、他クラスより値の変更ができず、カプセル化・データ隠蔽ということが守れ、複数人や大規模なプログラミングとなったときに事故が起こりにくくなり、とても大事なルールのようです。

 

 

 

その他に他クラスからアクセスしたいけど、Unity側のInspectorからは値を触らせたくないーというときにはプロパティを使います。↓

 

public float Thrust { get ; set ;}

 

コードが少し長くなりますが、「prop」と打ってtabを押せば自動的にコードを書いてくれるので、型と変数名だけを書けばOKです。

 

 

さらにプロパティだけどもInspectorから値を設定したいよーって場合は

 この書き方↓ではInspectorに表示されなくて、

[SerializeField] public float Thrust { get; set; }

 

少し長くなりますがこのように書けばInspectorからも弄ることができます!

[SerializeField] private float _thrust;
public float Thrust {
  get { return _thrust; }
  set { _thrust = value; }
}