【Unity】特定言語でモデルが巨大化してしまうバグの対応

  • URLをコピーしました!
目次

はじめに

特定言語でモデルのスケールがおかしくなるバグに対応したので、そのまとめです。

先に結論から言うと、ヨーロッパ圏では小数点にピリオド( . )じゃなくてコンマ( , )が使用されるのが原因で、端末言語の設定によってはモデル のスケールがおかしなことになってしまっていました(Scale = 0.9 のはずが Scale = 9 など)

バグにより巨大化した力士。ギガンティス^^;

経緯

最近、アプリをGooglePlayのPlayPassにリリースしたことで、今までほぼいなかった海外のユーザーが増えました。と同時に「モデルがデカ過ぎて足しか見えないぜ★1」的なレビューも激増。。最初はカメラ周りの不具合かと思って試行錯誤しましたが分からず、途方に暮れました。

解決への糸口

バグ報告をしているユーザーを整理してみることにしました。。そして見えてきた共通点が「全員ヨーロッパのユーザー」ということ。

言語バージョンAndroid OS
イタリア1.7.412
ドイツ1.7.312
スペイン1.7.312
フランス1.7.311
イタリア1.7.39
ドイツ1.7.312
スペイン1.7.39
ドイツ1.7.311
ポーランド1.7.39

試しに手持ちのAndroid端末の言語設定をドイツ語にしてみたら再現しました。やった!(ヤッタジャナイ)

想定の9倍になった力士。そりゃ★1だ

調べたところ、小数点の表記には「イギリス式(ピリオド)」と「フランス式(コンマ)」があり、国や地域でどちらを採用するかはまちまちとのこと。ヨーロッパは概ね「フランス式(コンマ)」を採用しているそうです。。コレだわ。

あわせて読みたい

そして解決へ

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);
ドイツ語環境でも正常に表示された力士^^

以上です。ご参考まで。

参考

HackMD
俺のスマホで動かすと世界最強のUnity製自作Androidアプリが海外ユーザの端末だと正常に動作しなくなってバ... # 俺のスマホで動かすと世界最強のUnity製自作Androidアプリが海外ユーザの端末だと正常に動作しなくなってバグ取りに追われるも、不具合がおきる端末が手元に無いので~~無...

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次