【Unity】InputField のキャレット(点滅するカーソル) が見えないときは… 
2020/09/08 Tue [edit]
エディタ画面ではちゃんと映っているのだが、なぜかランタイム(または Game ビュー)では InputField のキャレット(カーソル) が消えてしまい、少しつまづいたので、対処法を備忘録として残しておく。
(※) Unity 2019.2.21f1 / Windows10(x64) で確認
結論からと言うと、これは解像度による画像やフォントなどの自動伸縮によるもので、私が使っていた Canvas Scaler や Game ビューの解像度で 1px が伸縮され、見えなくなっていただけだった。

※クリックで画像拡大
はじめは原因がわからなかったのだが、エディタ上では見えているので、インスペクタで色々いじってみたら、InputField コンポーネントの設定で「Caret Width」をデフォルトの 1 → 2 へ変更したら見えるようになった。


※クリックで画像拡大
まぁ、もちろんキャレット(カーソル)の幅が大きくなってしまうのだが、解像度が十分に高い環境なら、ほとんど違いは気にならないだろう。
このとき使っていた設定は Canvas Scaler は 1920x1080 (Height: 1), Gameビューとランタイム時の解像度は 1280x720 にしていたが、この組み合わせだと(または UI の配置など)、たまたまキャレットが消えてしまったらしい(Gameビューの解像度を変えると見える)。
元々 Canvas 自体もスケールなどによって伸縮されたりするが、キャレットなど 1px の画像なども伸縮されたとき、計算上見えなくなってしまうことがある。これは画像の伸縮アルゴリズムによるものだと思うが(例えば、バイリニア法だとピクセルにスムージングがかかったりするが、ニアストレイバー法だと荒くなるみたいな。フォトショなどで 1px 画像を作って試すとわかる)、配置する座標などによっても見え方が変わることもある(浮動小数点型だと、整数位置以外にも置けるが、物理的なディスプレイはドットなので、当然半端な位置ほど、画像がぶれやすくなる → なので、Pixel Perfect みたいなオプションがある)。
まぁ、ただの仕様みたいなものなので、対処法は今回みたいに「Caret Width」を変えるとか、または解像度を固定するとか、場合によっては Text Mesh Pro (TMP) の UI 使うとか(小さい UI でもくっきり見やすい)、状況によって色々あると思うけど、見た目おかしくならなければ何でも良いと思う。少しでもヒントになれば嬉しい。
(関連記事)
【Unity】タブ切り替えの UI をコードを書かないで作る
【Unity】【C#】制限付きでテキストのサイズに合わせて他のオブジェクトのサイズも変化させる
【Unity】UI のフォーカスを外すコードと「Attempting to select while already selecting an object.」
【Unity】【C#】uGUI ドロップダウンの要素をコードで設定と取得、外観のカスタマイズなど
【Unity】5.6 の Canvas の警告:Shader channels Normal and Tangent are most often used with lighting~ を消す
- 関連記事
-
-
【Unity】「Missing (Script)」を修復する
-
【Unity】Androidのテキスト読み上げ(TextToSpeech)を使う
-
【Unity】【エディタ拡張】ヒエラルキー(シーン)の Image, RawImage に使われている画像(Texture)を検出するエディタ拡張(ツール)
-
【Unity】IncrementalCompiler でのエラー:Unloading broken assembly Packages/com.unity.incrementalcompiler/Editor/Plugins/Unity.PureCSharpTests.dll, this assembly can cause crashes in the runtime
-
【Unity】【C#】Quality (グラフィック品質) を文字列で取得/設定する
-
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/363-c3f992f8
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |