2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity】スクリプトの変数を変更してもインスペクターに反映されない時

Last updated at Posted at 2021-03-11

##①変数がpublicだとインスペクター上の値が優先されてしまう
<参考>
https://kan-kikuchi.hatenablog.com/entry/Inspector_Trap

変数をPublicにしてしまうと、スクリプトから変数の値を変更してもインスペクターの値が優先されてしまうとのこと。
上記の記事の通り、変数をprivateにするか、[HideInspector]をつけて

[HideInInspector]
public int num = 0;

とすればインスペクターに数字が表示されないのでスクリプトの変更がすぐ反映されるとのこと。
privateの変数でも[Serialized field]をつけているとインスペクターに表示されてしまうので注意。

②スクリプト変更時点でエラーがあるとインスペクターが更新されない

実行しなくても、プログラム変更時点の自動コンパイルでエラーがあるとインスペクターに変更は反映されないようなので注意したい。

自分が今回あたったのはこっちでした。
変数の型を変更してもインスペクターに反映されず。

初期設定ではプログラムに何か変更をすると自動でコンパイル(Auto Refresh)が走るらしい。
Unityのエディタに戻った時に一瞬停止するのはそのせい。

例えばあるスクリプトで何かの変数に変更を加えたけど、別のスクリプトから変更前の変数を参照しようとしているとか。

自分の場合は銃の残弾的な表示をSliderで作っていた部分を、やっぱりImageのFill Amountでやろうと思ってスライダーを変更したところ、
別のスクリプトからそのスライダーを参照していたのでエラーになってた。
該当スクリプトの変数をインスペクターから変更しようとしてもエラーがある段階ではできない。

いつもは実行時にエラーが起きているので、インスペクターに変数の値の変更が更新されないとか、そういうことはあまりなかったのでちょっと悩んだ。

変更が加わると実行しなくても自動でコンパイルされるのを覚えておくようにします。

自動コンパイル(Auto Refresh)を切るには下記の記事を参考に。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?