Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

posted at

updated at

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

①変数が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)を切るには下記の記事を参考に。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?