[報告]こんなことがありました
あるスクリプトが他のスクリプトの変数を用いようとしたところ、その変数が意図しないものになっていました。
その変数は前回のビルドより変更しており、新しいビルドで変更が反映していないようでした。
こんなことがありえるのかと少し調べたので報告したいと思います。
[調査]2つのキューブを用いました
まず、新規プロジェクトを作り、二つのCubeをシーン上に配置します。
左側が CubeA 、右側が CubeB です。
また、Cubeのインスペクターはそれぞれ次の画像のようにしました。
インスペクターの CubeB 内の変数 AttachPos の初期値は、後述するスクリプト CubeA.cs で読み取られます。
初回の実行はキューブを重ねる
最初の実行は、CubeB が CubeA に重なるようにしました。
CubeA と CubeB のスクリプトは以下のとおり。
CubeA.cs
CubeB.cs
実行するとは二つの Cube が重なりました。まずは成功です。
次に、CubeBのスクリプトを変更して実行する
CubeB を CubeA に隣接させようと CubeB のスクリプトの attachPos の初期値を変更しました。
CubeB.cs ※変更後
実行結果は次の図のように、重なってしまいました。
コードを変更してもビルドに反映されていない結果が確認できました。
[検証]CubeA.csをウォッチする
VS.Codeの「Debugger for Unity」プラグインを用いて
CubeB.cs変更後における CubeA.cs のcube_b.attachPos変数の中身です。
x = 0, y = 0, z= 0 となっていて、これでは初回の実行結果と同じになってしまいます。
[解決]こんなことがありました
解決策の一つとして、CubeBにアタッチしていたスクリプト CubeB.cs を外して実行。
エラーで止まったら実行をやめ、再度、CubeB に CubeB.cs をアタッチします。
再度、実行すると CubeB がスクリプトどうりに CubeA に隣接しました。
CubeA.cs のcube_b.attachPos変数の中身は下図のように変更した初期値が反映されていました。
考察:Unityエディタが実行前のビルドするとき・・・
これまでの検証により私は、Unityエディタの実行前ビルドにて
スクリプトが変更されていないと誤認識してしまうのではないかと考えます。
また、インスペクターの構成が変化するとそのオブジェクトだけ再ビルドがかかっている感じです。
注意することは、これはVecter3変数の初期値の変更だけしか検証できていないということです。
おわりに
今回の結果から、もしスクリプトの変更が反映されなかった場合は
該当のスクリプトをインスペクターにアタッチし直すことで解決できる場合が
あることがわかりました。
以上、だれかのお役に立てれば幸いです。
最後までお読みいただきありがとうございました。