OnMouseMoveで自作カーソルを動かす……のはあんまり良くない
「前にウィジェットでマウスカーソル作った時にOnMouseMoveがないか探してたんだけど、オーバーライドのところで見つかったから、今日はこれを使って自作カーソルの移動処理を作ってみました」
「Canvasでカーソル作ってslotを経由したりというのは前のと同じ。座標計算も実はGetPlayerContlollerから同じ方法で出来るんだけど、折角だからマウスイベントから引っ張り出せるノードだけを使うようにした。GetScreenPositionの代わりにGetLastScreenSpacePositionを使ってもいい。というか、どう違うののかわからなかった。OnMouseMove以外の関数だと違う場合もあるのかも」
妹「OnMouseMoveでやると何が違うの? 前回はちょっとカーソル遅れてたけど、それが直るとか?」
「それもちょっと期待してたんだけど駄目。普通に考えるとティックよりも入力系のOnMouseMoveの方が優先度高そうなんだけど。もう少し負荷がかかって、ティックが頻繁にサボる状況になれば違いが出るかも。少なくともOnMouseMoveの方が遅いということはないと思う」
妹「じゃああんまり変わらないのか」
「それが今わかってる範囲でも1つ大きな違いがあった」
妹「やっぱりカーソル遅れてる……むしろ悪化しとる……」
「録画の都合もあるけど、途中の明らかにカーソルがついていってないところは、マウスの左ボタンを押しっぱなしにしてるんだよ。つまり左ドラッグの操作。こうするとOnMouseMoveのとこに反応がない。他の関数をオーバーライドすれば反応するのかもしれないけど、見つけられなかった」
妹「本物のカーソルは動いてるわけだし、本番でカーソル消すとしても、やっぱり動いてた方がいいような」
「イベントティックだと押してる動作に関係なく動かせる。単純にカーソル表示するだけ処理はティックで作った方がいいと思う。マウスの操作に合わせて色々する場合にはこのへんの関数をオーバーライドして使えば良さそう」