非常にニッチな不具合があったのでメモ。
InputFieldは入力用の機能だけど初期値なんかで値を入れたいこともある。
よくあるミスのTextクラスの書き換えではなく、ちゃんとInputFieldの書き換えを使って以下のようなコードを使った。
1 2 3 4 5 6 7 8 |
[SerializeField] InputField inX,inY,inR; public void SomeMethod(){ ... inX.text = ((int)(img.transform.position.x-initPx))+""; inY.text = ((int)(img.transform.position.y-initPy))+""; inR.text = ((int)img.transform.rotation.eulerAngles.z)+""; ... } |
Unityエディタ上では正しく動作し、アプリにしてAndroid実機で確認すると inY に当たるものだけ書き換わらなかった。
色々試したところ inY は最初の書き換えだけ成功してその後の書き換えはできない状態だった。
単純ミスも見つからないし、エディタ上で動く以上は何らかの不具合だろうと考えて処理を分けてみた。
1 2 3 4 5 6 7 8 9 10 11 |
[SerializeField] InputField inX,inY,inR; public void SomeMethod(){ ... int _x = (int)(img.transform.position.x-initPx); int _y = (int)(img.transform.position.y-initPy); int _r = (int)img.transform.rotation.eulerAngles.z; inX.text = _x+""; inY.text = _y+""; inR.text = _r+""; ... } |
すると問題なく動作するようになった。
必ず inY のみが書き換えられなかったので、計算の処理と書き換えの処理が入り混じっていたことが原因かもしれない。