目次
はじめに
特定言語でモデルのスケールがおかしくなるバグに対応したので、そのまとめです。
先に結論から言うと、ヨーロッパ圏では小数点にピリオド( . )じゃなくてコンマ( , )が使用されるのが原因で、端末言語の設定によってはモデル のスケールがおかしなことになってしまっていました(Scale = 0.9 のはずが Scale = 9 など)
経緯
最近、アプリをGooglePlayのPlayPassにリリースしたことで、今までほぼいなかった海外のユーザーが増えました。と同時に「モデルがデカ過ぎて足しか見えないぜ★1」的なレビューも激増。。最初はカメラ周りの不具合かと思って試行錯誤しましたが分からず、途方に暮れました。
解決への糸口
バグ報告をしているユーザーを整理してみることにしました。。そして見えてきた共通点が「全員ヨーロッパのユーザー」ということ。
言語 | バージョン | Android OS |
---|---|---|
イタリア | 1.7.4 | 12 |
ドイツ | 1.7.3 | 12 |
スペイン | 1.7.3 | 12 |
フランス | 1.7.3 | 11 |
イタリア | 1.7.3 | 9 |
ドイツ | 1.7.3 | 12 |
スペイン | 1.7.3 | 9 |
ドイツ | 1.7.3 | 11 |
ポーランド | 1.7.3 | 9 |
試しに手持ちのAndroid端末の言語設定をドイツ語にしてみたら再現しました。やった!(ヤッタジャナイ)
調べたところ、小数点の表記には「イギリス式(ピリオド)」と「フランス式(コンマ)」があり、国や地域でどちらを採用するかはまちまちとのこと。ヨーロッパは概ね「フランス式(コンマ)」を採用しているそうです。。コレだわ。
そして解決へ
CSVから値をFloatにパースして、モデルのスケールに数値を代入していたのですが、小数点にコンマが採用されている言語では、意図した値にパースされずに代入されていたようです。
//例 ドイツ語環境では「0.9」ではなく「9」が代入されていた。
var scale = float.Parse("0.9");
下記の要領で、2番目のパラメータに「System.Globalization.CultureInfo」でカルチャを指定して、パースすることで対応できました。
//例 カルチャを英語に指定する
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US");
//例 ドイツ語環境でも「0.9」が代入される。
var scale = float.Parse("0.9", ci);
以上です。ご参考まで。
参考
俺のスマホで動かすと世界最強のUnity製自作Androidアプリが海外ユーザの端末だと正常に動作しなくなってバ...
# 俺のスマホで動かすと世界最強のUnity製自作Androidアプリが海外ユーザの端末だと正常に動作しなくなってバグ取りに追われるも、不具合がおきる端末が手元に無いので~~無...