妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

OnPreviewKeyDownイベントでウィジェットのフォーカスを制御する

f:id:una_unagi:20151125175654p:plain

妹「EventReply関係の話を探していたら、なんかウィジェットをキーボードを動かそうとしてる話を見つけたんだけど、その人がやってた方法はこうやってOnPreviewKeyDownイベントをオーバーライドしてたんだよ」

f:id:una_unagi:20151125175922p:plain

f:id:una_unagi:20151125175929p:plain

「同じやり方を新しいウィジェット用に試したんだけど、SetUserFocusを使うとEventReply型のパラメータがでてくるから、それをReturnValueにセットすると、理屈はよくわからないけどなんか動いた。これ主人公のキー入力でやるのとウィジェットのイベントをオーバーライドするのと、どっちがいいんだろう?」

「多分どっちでもいいんだろうけど、ウィジェットの方でやった方が自然かな。フォーカスがある時だけ反応するようにする時もいちいちフォーカスを調べなくていいし。でもそうか、こんなところにも使える関数があったのか。OnMouseMoveイベントもちゃんとあったんだなあ」

妹「Previewが付いてるのと付いてないのとどう違うのかわからなかったけど、とりあえず作例ではPreview付いてる方を使ってたからそのまま」

「やり方としては合ってると思う。最初のキー入力の分岐のところとか、整理したくてムズムズはするけど、ぱぱっと直せる感じでもないのか。Key型のSwitchノードも無いし」

妹「なんか良い方法ある?」

「String型に変換出来れば、それを基準にSwitch出来るんだけど、それも無理か。とりあえずKey型の配列を作って受け取りたいキーを一式入れておいて、その中から一致するのを見つけたらその番号を基準にSwitchノードで分岐させるぐらいしか思いつかない」

妹「それだとブランチたくさん作る方が簡単そうだなあ……あとこの方法で気になるのが、普通のカーソルキーを使った移動も有効のままなんだよ。今回の場合だと、AとDでも動くし、カーソルキーでも動く、どっちでも動く感じになる。そのへんどうなってるのかなあと」

(続く)