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

妹でもわかるUnrealEngine4

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

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

OnMouseMoveで自作カーソルを動かす……のはあんまり良くない

imoue.hatenablog.com

「前にウィジェットマウスカーソル作った時にOnMouseMoveがないか探してたんだけど、オーバーライドのところで見つかったから、今日はこれを使って自作カーソルの移動処理を作ってみました」

f:id:una_unagi:20151128232317p:plain

Canvasでカーソル作ってslotを経由したりというのは前のと同じ。座標計算も実はGetPlayerContlollerから同じ方法で出来るんだけど、折角だからマウスイベントから引っ張り出せるノードだけを使うようにした。GetScreenPositionの代わりにGetLastScreenSpacePositionを使ってもいい。というか、どう違うののかわからなかった。OnMouseMove以外の関数だと違う場合もあるのかも」

妹「OnMouseMoveでやると何が違うの? 前回はちょっとカーソル遅れてたけど、それが直るとか?」

「それもちょっと期待してたんだけど駄目。普通に考えるとティックよりも入力系のOnMouseMoveの方が優先度高そうなんだけど。もう少し負荷がかかって、ティックが頻繁にサボる状況になれば違いが出るかも。少なくともOnMouseMoveの方が遅いということはないと思う」

妹「じゃああんまり変わらないのか」

「それが今わかってる範囲でも1つ大きな違いがあった」

f:id:una_unagi:20151128234616g:plain

妹「やっぱりカーソル遅れてる……むしろ悪化しとる……」

「録画の都合もあるけど、途中の明らかにカーソルがついていってないところは、マウスの左ボタンを押しっぱなしにしてるんだよ。つまり左ドラッグの操作。こうするとOnMouseMoveのとこに反応がない。他の関数をオーバーライドすれば反応するのかもしれないけど、見つけられなかった」

妹「本物のカーソルは動いてるわけだし、本番でカーソル消すとしても、やっぱり動いてた方がいいような」

「イベントティックだと押してる動作に関係なく動かせる。単純にカーソル表示するだけ処理はティックで作った方がいいと思う。マウスの操作に合わせて色々する場合にはこのへんの関数をオーバーライドして使えば良さそう」