久しぶりです、大丈夫まだ生きてます。
UIの画面を作っていると、「あとはカーソルを動かせれば完成なのに・・・」「パッドのトリガーでページ切り替えしたい・・・」「ウィンドウを閉じたり開いたりしたい・・・」「Xボタンを押しながらだとスクロールができて・・・」などなど、実際に動かして確認したくなります。
UIはユーザーが操作するからUIであるということで、キー操作を受け付ける動作が必須です。そのあたりの処理は、ブループリントマクロライブラリを作ることで面倒なキー入力周りの処理が一気にラクになります。プロジェクトに一つ置いておけば、どのブループリントからでも簡単に利用できます。
同じようなキー入力処理をやるためのしくみを、ちょうど一年前に書いていました。
この時は親クラスを先に作って、そこから子クラスを作る流れでした。
それなりに手数が必要になります。
今回はクラスとか気にせず気軽にキー入力周りを扱うためのマクロを作ります。
これは使いたいときにどのブループリントでも呼び出して使うことができます。
作ってみる
まずコンテンツブラウザで右クリックして、
Blueprints > Blueprint Macro Library を選択します。
ダイアログが出てくるので、
Object をフォーカスしてからOKボタンを押します。
アイコンが出てきたら名前を付けてやります。この名前はただのアセット名なので後でなんのために作ったかわかるようになっていればなんでもOK。マクロライブラリ自体がいろんなブループリントから参照されるので、UI_Common とかでいいかなと思います。
名前を付けたらアイコンをダブルクリックして編集開始です。
エディタが開くと下のような形になっているので、まずは右上のフォームからマクロの名前を入力します。
この名前がノードとして扱われることになります。右上の + ボタンでいくつでもマクロを追加できます。
今回、UI_InputCheckSimple という名前で進めます。
引数(パラメータ)をセット
レベルブループリント以外でInputノードが使えないので、キー入力を受け取るためには、Was Input Key Just Pressed ノードを使います。
これは get Player Controller ノードから値をもらわないと働いてくれないので、まずは Player Controller型 のマクロの引数(Inputパラメータ)を追加します。
最後じゃなくてもいいので、名前は必ず変更するようにします。
どんどんつなぐ
そこからドラッグして Was Input Key Just Pressed ノードを取り出します。
このノードのKeyの横にあるプルダウンから押したかどうかを検出する対象を選びます。で、ブール値(true か false)の出てくる赤いピンがあるので、そこからブランチノードをつなぎます。(ブランチノードはキーボードの[ B ]を押しながらクリックすると取り出すのがラクチンです)
実行ピンがまだつながっていないので、ブランチノードからドラッグして、Inputsノードの上でドロップします。ドロップ場所に気をつけて、いい感じにドロップするとうまくつながります。
後からのものは下に足されていくので、順番が気になる場合は変更します。Inputsノードを選択している状態で、Detailsタブの中にある項目から変更できます。
これを1セットとして、
ブランチノードの false から次の Was Input Key Just Pressed ノードへ、数珠繋ぎになるようにつないでいきます。
一通りつないだら、true のピンを Outputsノードにつないでいきます。
さっきやったドラッグ&ドロップが便利です。
なるべくわかりやすいピン名にしておきます。
でき上がりです。
上・下・左・右・決定 を検出できるようになります。
これをコンパイルしてエラーが無ければ保存して閉じます。
使い方
使いたいブループリントの Tick ノードにつないで使います。
同じプロジェクト内であればどこでも呼び出すことができます。
↓サンプル
マクロを作成する際にインスタンスカラーというのが設定できます。キー入力イベント関連なのでノードに赤色を付けてみました。
次回以降
このマクロを使って、キャラセレ画面を作ってみる記事を書こうと思います。
ではでは~