VRTKのキーボード
VRTKのサンプルシーン(34)にあるキーボードを自分のシーンにもってきて入力する。
Keyboardプレハブ自体はこんな感じ。
UI_Keyboardでキー入力やEnterの処理をしている。
入力自体はすぐにできた。
InputFieldをクリックしなくてもVRTKのキーを入力したら反応する。
ただinputfieldのtextに文字を流しているだけ
input.text += character;
もはやただのText表示みたいなもの。InputFieldである必要性があんまりない。
使ってあるのPlaceholderぐらいでは(入力する前の「InputText...」という表示)
カーソルもなぜか出ていない。
サンプルシーンでは出ていたのか?サンプルシーンはエラーとか゚VRのレーザーが反応しなかったりでプレイできていない。
独自のInputField
今はWorldKeyboardというオブジェクトの子のInputFieldに反応するようになってるけど、自分で作った別の場所にあるInputFieldに入力内容が出るようにしたい。
スクリプトはこんな感じで自分の子のInputFieldを取得している。
input = GetComponentInChildren<InputField>();
自分で作ったInputFieldをインスペクタからセットする感じにした。
public InputField inputSearchTablet;
input = inputSearchTablet;
ちなみにもともとキーボードのスクリプト名はUI_Keyboardという名前だった。
いじっていくので別のスクリプトを作った。
別のスクリプトにしたらそれぞれのキーボタンの参照も変わる。ヒエラルキーで選んで全部一気に替えられた。
InputFieldをクリックでエラー
でもInputFieldをクリックするとエラーが出る。
NullReferenceException: Object reference not set to an instance of an object
UnityEngine.UI.InputField.ActivateInputFieldInternal () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/InputField.cs:2835)
UnityEngine.UI.InputField.LateUpdate () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/InputField.cs:1260)
今はinputFieldをクリックしなくてもキーを押したらすぐに入力が開始される。
動作はちゃんとするんだけど。
治った?
なんか治った。上のスクリプト変えるやつやったら出なくなった。
でもキーボードを表示してない状態でInputFieldを押すと同じヌルが出る
なんなんだろう。
ReadOnlyにしても変わらなかった。
InputFieldのクリックでキーボードを出す
InputFieldを押したらVRTKのキーボードをactiveにしたい。
でもInputFieldにClickの関数なんてない。
この方が同じようなことをしている。
InputFieldを押したときってどうやってとるの?OnSelectが来た時ってこと?
ちなみにInputFieldにbuttonを付けようとすると怒られました。
buttonを上に重ねた
結局InputFieldの上に透明なボタンを重ねました。
でクリックしたらKeyboardがActiveになるようにする。
キーボードはEnterを押したら自分が消えるようにしました。
public void Enter()
{
input.text = "";
this.gameObject.SetActive(false);
}
これでInputFieldのクリックが反応してエラーが出ることもなくなったしいいのでは。
ついでにキーボードに×ボタンもつけよう。
Android
InputFieldを押したらAndroidだとスマホのキーボードが出てくるそうです。
Questでやってみたけどさすがに出てこなかった。
ただ昔、VysorでGoの画面共有をした時はVysorのPCのほうに出てきた気がします。
この方は結局ボタンをInputFieldっぽくしています。
最低限はこれでもいいし、むしろこっちのほうが楽な気はするけど、カーソルやPlaceholderのテキストとか゚が作れない。デザイン的なあれ。
InputFieldの入力を受け付ける機能は本当に要らないんだよな。
その他
inputField.ActivateInputField();でスクリプトからフォーカスを当てることはできるらしい。
今まではInputFieldをクリックすることでフォーカス(文字を入力できる状態にすること)していましたが、スクリプトでフォーカスすることもできます。
最後に
というかなんでカーソル出てないんだろう?入力を受け付けていない??
ただテキストに流しているだけだから?