Unity勇者の冒険の書

Unityで学んだことや便利なものなど作ったら紹介します

【Unity勇者の奮闘記】public変数をInspector上から消す

こんにちは。

今回は実際にあった経験から、Public変数をインスペクタ上から消してみました。

実際にあったことはこんな感じでした。

 

 

private float speed = 10.0f;

っと、初期値を入れて、実行!
…あれ?動かないなぁ…。

何で~??プログラムは合ってるよなぁ……

 

~1時間後~

 

あっ!

f:id:LightGive:20171102214245p:plain

 

Publicで宣言してたからInspectorに0が入ってるやん…

プログラムで=10.0fってやってもInspectorの値を持ってきてたんやね…。

俺の1時間はなんやったんや…。

 

なんてことありませんか?

 

色んな所から呼び出す変数だからprivateで宣言するわけにもいかないし…
public変数をInspector上から消すってことが出来ればなぁ…

まぁGetを作ればいいんだけど面倒だしなぁ…と調べていたら
いいものがありました!

[HideInInspector]
[System.NonSerialized]

 

これを変数宣言する前につけるだけ。 

 

逆に、「これは参照されないけど、インスペクタから値を変更できるようにしたいなぁ」

っていう、private変数をインスペクタ上に表示するのは、
[SerializeField]

[System.Serializable]

 

でいけますね。
[HideInInspector]の方はプレハブで値を持つらしいから
[System.NonSerialized]を使うほうがトラブルが少なくなるっぽい

 


使い方は、めっちゃ簡単!

[System.NonSerialized]
public int enemyHP;

[System.NonSerialized]

 

f:id:LightGive:20171102215338p:plain

 

よし、消えた。すっきり!

でも一つずつ変数の上に指定しないといけないのは面倒だねー
何はともあれ解決した!

 

では!


参考にしたページ

[NonSerialized] vs [HideInInspector] question - Unity Answers

qiita.com

 

では('ω')ノ