不思議なマウスカーソルの挙動 #UE4
「ウィジェットを使う時にどうしても考えないといけないのがマウスカーソルの問題」
妹「それはなんか前に少し調べたような気がする。自分で作ったカーソルを表示する方法とか」
「今回あらためて調査したんだけど、実際問題としてよくわからなかった。これはバージョン4.15.2時点の記録。まずウィジェットに対してマウス反応するかどうが、という点で、みっつの選択肢がある」
- SetInputModeGameOnly ウィジェットには反応しない(デフォルト)
- SetInputModeGameAndUI 指定したウィジェットに反応
- SetInputModeUIOnly 指定したウィジェットにだけ反応
「このうち一番変なのがSetInputModeGameOnlyのケースで、ウィジェットをクリックできてしまうケースがある。具体的には、SHIFT+ENTERで、いったんカーソルをゲーム外に出して、もう一回ゲーム画面をクリックした時。そのクリックした地点にウィジェットがあると、クリックできてしまう。それ以降はカーソルは表示状態で、SetInputModeGameAndUIのような動きに変化する」
妹「ウィジェットに反応したらダメなのでは……」
「一応回避策は見つかった。ウィジェットのIsFocusableのチェックを外しておくと、そういう不思議な動作は起こらなくなった」
「ここでいうfocus(フォーカス)というのは注視点とかのことじゃなくて、操作対象になるということ。ブラウザのアンケート欄とかに書き込む時に、マウスで入力欄はここって指定するでしょ? あれはその入力欄にフォーカスがあるという状態」
妹「それは知らなかった。でもボタンにフォーカスがあると何かいいことが?」
「その状態でキーボードに何か入力すると、フォーカスがあるウィジェットに対する操作、という扱いになるはず。ただキーボード使わずに全部マウスで操作するならこれは要らないはずだし、キーボードとか使う場合でも自分で色々細かく指定する場合もやっぱり要らないはず」
妹「それは……要らないのでは?」
「何かフォーカス絡みで思うように動かない箇所が出たら、チェックしないといけないこともあるのかもだけど、今のところはチェックは外しっぱなしで良さそうに思える」
「もうひとつ、SetInputModeGameOnlyなのにウィジェットをクリックできてしまうケースがあって、それはマウスカーソルを表示にしてる場合。1度ウィジェットがある場所をクリックすると、それ以降はやっぱりSetInputModeGameAndUIみたいな動作になる」
妹「全然GameOnlyじゃないね」
「これについては解決策が見つかってない。InFocusableを外してても関係なく起こる。カーソル非表示にして、自作カーソルを表示するぐらいしか手がなさそう」
「残りの2つのモードについては今のところ大した問題は起きてない。ただやっぱりInFocasableは外しておかないと、非表示のカーソルが出てきたりはする」
妹「まあでもクリックできるウィジェットがあるってことは、クリックしたいってことだから、SetInputModeGameAndUIとかになるのかな?」
「普通はそうだと思う。クリックできないウィジェットなら問題は起きない。クリックできなくていい物まで反応しちゃう場合は、可視性の設定のところで変更出来る」
「SetInputModeGameAndUIには1つ問題があって、GameOnlyだとマウスを動かすだけで視点が動いてたのが、GameAndUIだと一度クリックした状態、つまりドラッグ状態じゃないと動かせなくなる。これは仕様なのかバグなのかよくわからないところ」
妹「うーん、前も悩んだようなきがするんだけど、普通に今まで通り動かせて、それ+でウィジェットだけクリック出来るようにはならないのかな?」
「それを上手くやる方法は見つかってない。GameOnlyでカーソル表示させて、ウィジェットをクリックした瞬間にGameOnlyに戻す案のもダメだった。戻そうとしても戻らない。いっそUIOnlyにして、UIからアクター側を動かす仕組みにするとかの方が可能性あるかも。それが操作しやすいかどうかって問題はあるんだけど」
妹「そうはいわれても、自分で動かしてみないことには、操作しにくいのかどうだかよくわからないんじゃよ」