TextMeshProから文字列を取得する際の注意事項。
何が起こったか
ちょっとライブコーディング用のツールを作っているのですが、以下の事象に遭遇しました。
- TextMeshProから文字列取得した
- 取得した文字列を別の言語でコンパイルしてみたところ謎のエラー発生
- エラーの中身を見ると、文字列に何らかの終端文字のようなものが埋め込まれている模様
- Stringに対し特定の文字除去の処理を行ってみても処理されないため、値格納後の除去も困難
原因・状況の調査
文字列がどんなものであるか、以下のコードを使って検証してみました。
(UnityEditorのコピペではうまく取得できなかったので、メモリから引っこ抜く形で対応)
string tst;//取得した文字列を格納する変数。適当に値を詰め込んで下さい。 foreach (char c in tst ) { int intVal = Convert.ToInt32( c ); string outStr = String.Format("{0:X2}", intVal ); Debug.Log(outStr); }
上記のコードで、取得した文字列を16進数に変換します。
これで消せる文字列かどうか、どういう種類かもわかるわけですね。
結果としては、「200b」なんて文字が入っておりました。
これは、幅ゼロのスペースらしいです。
下記リンクに記載があります。
解決策
TextMeshProGUIではなく、TMP_InputFieldのtextプロパティから取得すると、
ゼロ幅スペースがなくなる模様。
この方法で自分のところでもエラーが消えました。