zer0から始めるプログラミング生活

unreal EngineやUnityのTipsを書いていきます。

仮想キーボードの作り方(UE4.13~)

World内にキーボードとディスプレイを設置して文字を入力する方法をメモ。

VRでも利用可能みたいです。

 

①キャラクターの設定

自分の操作するキャラクター(ここではFirstPersonCharacter)にWidgetInteractionを追加します。そこからデバッグラインが出るので違和感ない場所に移動して「詳細→Debugging→Show Debug」をオンにします。

以下の画像ではSphereの下に追加していますが、FP_Gunの下でもいいようです。

f:id:bigden:20161128033313p:plain

 

②入力の設定

FirstPersonCharacterのイベントグラフに仮想キーボードのボタンを押下する動作を割り当てたい入力イベントを出します。そして、①で追加したWidget Interactionをドラックしグラフに持っていき、そこから Press Pointer KeyとRelease Pointer Keyを追加します。Keyは両方ともLeft Mouse Buttonにします。(ここでは右クリックが左クリックとみなされ、仮想キーボードのボタンを押下したことになります。)

f:id:bigden:20161128034251p:plain

 

 ③ブループリントの準備

Actorとwidgetブループリントを2つずつ作成します。(KeyPadはキーボード、Displayは入力した文字、値が表示されるディスプレイです。)

 

④Display_WB 1

Display用のWidgetブループリント(Display_WB)を開き、Canvas PanelをText Boxに置き換え、「右クリック→Wrap with...→Size Box」をクリックします。

 

f:id:bigden:20161204024618p:plain

 

⑤Display_WB 2

Size BoxをDesired on Screenにし、Width overrideとHeight overrideを好きな値に設定します。

f:id:bigden:20161204025200p:plain

 

⑥Display_WB 3

Hint Textにはここに入力してほしいことを書きます。よくログイン画面に見る「パスワード」などの薄く表示される文字です。ここはなくてもかまいませんが、ないとここに何を表示させたいのか分からなくなります。

f:id:bigden:20161206034621p:plain

 

⑦KeyPad_WB 1

KeyPad用のWidgetブループリント(KeyPad_WB)を開き、Buttonにtextを親子づけして追加して、「Detail→Content→text」には送りたい文字を書きます。他にBackSpace用とEnter用のボタンも用意します。その後、全てのボタンで 「Detail→Interaction→Is Focusable」のチェックを外します。

f:id:bigden:20161206040323p:plain

 

⑧KeyPad_WB 2

KeyPad_WBのグラフに行き、全てのボタンの「OnClicked」イベントを出します。

 

⑨KeyPad_WB 3

String型とWidgetInteractionComponent型の2つの変数を追加します。(String型をChar To Send、WidgetInteractionComponent型をWidgetInteractionと名づけました。)

f:id:bigden:20161206041040p:plain

 

⑩KeyPad_WB 4

BackSpaceとEnter以外の「OnClicked」イベントにChar To Sendをセットしつなげ、送りたい文字をセットします。アルファベットはもちろん、数字やひらがな、カタカナ、漢字も大丈夫みたいです。

f:id:bigden:20161206041252p:plain

 

⑪KeyPad_WB 5

Send Key Charを出し、ターゲットにはWidgetInteraction、CharctersにはChar To Sendを繋げます。

f:id:bigden:20161206041604p:plain

 

⑫KeyPad_WB 6

BackSpaceの「OnClicked」イベントにPress and Release Keyをつなげ、ターゲットにWidgetInteractionを繋げ、KeyをBackSpaceにします。 

f:id:bigden:20161206041611p:plain

 

⑬KeyPad_WB 7

イベントディスパーチャー(ここではEnterPressedと名付けました)を追加し、呼び出します。グラフ上までドラックしてドロップするとアクションを選べるので「呼び出す」を選択するか、右クリックで検索して出してください。

f:id:bigden:20161206041617p:plain

 

⑭Display_Actor 1

Display_Actor(Display用のアクター)を開き、Add componentからWidgetを出します。Widget Class にDisplay_WBを選択し、Draw at Desired Sizeにチェックを入れます。

モザイクをかけてますが気にしないでください。(新しく用意するのめんどくさかった)

f:id:bigden:20161210004739p:plain

 

⑮KeyPad_Actor 1

同じようにKeyPad_Actor(KeyPad用のアクター)を開き、Widget ClassにKeyPad_WBを選択します。そして、Window Focusableのチェックを外し、Draw at Desired sizeのチェックを入れます。

f:id:bigden:20161206041658p:plain

 

⑯KayPad_Actor 2

さらにAdd componentからWidget Interactionを追加し、Enable Hit Testingをオフにします。

f:id:bigden:20161206041710p:plain

 

⑰KeyPad_Actor 3

KeyPad_ActorのBegin PlayイベントにCast To KeyPad_WBを繋げ、WidgetとGet User Widget ObjectをObjectピンに繋げます。

f:id:bigden:20161206041727p:plain

 

⑱KeyPad_Actor 4

KeyPad_WBのWidgetInteractionをセットし、KeyPad_ActorのWidget Interactionを繋げます。その後、ノード検索で、EnterPressedを割り当てるを、選択するとBind Event to EnterPressedとカスタムイベントが出て来ます。

ひとつずつ、Bind Event to EnterPressedとカスタムイベントを出してもダメ。

カスタムイベントの先にはEnterを押した時にやって欲しい処理を、書きます。

f:id:bigden:20161206041746p:plain

 

⑲KeyPad_Actor 5

KeyPad_ActorにDisplay_Actor型の変数を追加します。

f:id:bigden:20161228005422p:plain

 

⑳KeyPad_Actor 6

world内にKeypadとDisplayを設置し、KeypadのTargetDisplayのところをDisplayにします。

f:id:bigden:20161210005018p:plain

 

以上です。

 

参考

docs.unrealengine.com

docs.unrealengine.com

docs.unrealengine.com