読者です 読者をやめる 読者になる 読者になる

妹でもわかるUnrealEngine4

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

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

マウスカーソルを表示するとマウスの移動量が取得出来ない問題

※4/20
UE4.11.2で修正が入ったので、追加記事を書きました
UE4.11.2でマウスカーソル表示時の不具合が修正 - 妹でもわかるUnrealEngine4


f:id:una_unagi:20160412224543p:plain
f:id:una_unagi:20160412224551p:plain

妹「ちょっとマウスカーソルを表示しようとしてたんだけど、そしたら1度画面をクリックした後は、カメラが動かなくなるんだよ。元々マウスの動きに合わせてでカメラが動くようになってて、そのへんはTPSだったかのテンプレート通りだから、やり方は間違ってないと思うんだけど」

「カーソル表示してどうするの?」

妹「クリックしたやつを選択するというか、まあそんなかんじのことを。あとそうなるのはエディタの中のビューで実行した場合で、新しいウィンドウを作るとクリックしなくても最初から動かない。カーソルさえ表示しなければどっちも問題なく」

「原因はともかく、マウスでカメラが傾くタイプで、その仕組みは相性悪そうな気がする。アイテムをクリックしようと思ってマウスを動かすとカメラも動いちゃって、思った通りのとこをクリックするの難しそう」

妹「その場合は何かキーを押したらそうなるとか、押しながらだとそうなるとか、そのへんは色々考えてるんだけど、とにかくカーソルを出しただけで、動いてたのが動かなくなるという理屈がさっぱりわからなくて……」

Why is my mouse axis input ignored? - UE4 AnswerHub

「検索すると英語のフォーラムやAnswerHubにいくつかそれらしい投稿があった。どうもカーソルを表示してると、移動量の検知が上手くいかなくなるものらしい」

妹「なんで? バグ?」

「そのへんはよくわからないけど、たださっきも言ったように相性が悪いのは確か。移動量というのは、横にどれぐらい動いたか、縦にどれぐらい動いたかっていう、マウスの動きを表す数字だけど、カーソルの動きを表す数字じゃない。画面には端っこがあるから。それでマウスは移動してるのにカーソルは動かないということがしょっちゅう起きる。結果マウスの移動量とカーソルの動きはチグハグになる」

妹「画面端で動かないのはわかるけど、でもカーソルは動かさないとしても、マウスを動かした量はわかってるんだよね?」

「わかるはずだけど、混乱するから無効化してるのかも。問題がもう1つあって、カーソルはウィンドウがはみ出した場合、その状態での移動をどう考えるかという問題がある。UE4の動作を見た感じだと、カーソルが非表示の場合はマウスキャプチャーされてて、いくら動かしてもカーソルがウィンドウの外に出せない状態になってる。Windowsキーを使うとか、ゲームを終了するとかしないと他の操作が出来ない。単純にカーソルが見えないだけだったなら、動かしてるうちにウィンドウから出た見えるようになるはずだから」

妹「ホイールはどっちでも普通に動いてたんだけど、これはいいの?」

「ホイールはカーソルの動きと関係してないからね」

妹「細かい理屈はあれだけど、とりあえずそのままだとカメラとカーソル両方動かせないのはわかったけど、じゃあどうしたらいいんだろ?」

「よく使わる方法は2つあって、1つは場面ごとの切り替え。FPSやTPSだと、何かキーを押してウィジェットを出した時は普通にマウスカーソルを動かせるタイプのゲームが多い。妹が考えてたキーを押してる時だけっていうのもこれに近い。2つ目は画面中央に固定のカーソルを、ウィジェットか何かで作っておく方法。カーソル付近に何か物があるとそれを光らせて、クリックすると所定のアクションを実行する。アイテムを拾う時なんかはこのパターンが多い」