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

妹でもわかるUnrealEngine4

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

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

自作マウスカーソルをウィジェットとして表示する

妹「カーソルの方もだいたいわかった。GetMousePositionScaledByDPIというのを使うと、DPIを計算した後の場所が出てくる。ような気がする」

f:id:una_unagi:20151112230734p:plain

「あとカーソルの位置もかな。標準だと動かす側のCanvasPanelの左上が、マウスカーソルの場所に来るから、カーソルの形次第では困る」

妹「位置合わせは昨日のフキダシの時にAlignmentで指定してたんだけど、ここで合ってるのかな?」

f:id:una_unagi:20151112230847p:plain

「他にも動かせるパラメータはあったけど、Alignmentが一番それっぽい気がする」

妹「じゃあこれで完成か」

「それでもいいんだけど、それだとカーソルを画面外に出した時に、カーソルの絵が画面端あたりに残っちゃうと思う」

妹「ほんとだ。これは一体どうしたらいいのか」

「実害はないから、普通に売ってるゲームでもそのままにしてあることはある。対処する場合はウィンドウからカーソルが出た事を捕捉出来るイベントを使う。UE4の場合だとウィジェットのOnMouseLeaveとOnMouseEnterで、そのウィジェットから出たり入ったり調べる方法があった。それを使って、カーソルの表示と非表示を切り替える」

f:id:una_unagi:20151112232914g:plain

「実際はゲーム中のカーソルは非表示にするけど、動きとしてはこんな感じになる。カーソルの消し方と出し方はここに書いてある」

docs.unrealengine.com

妹「あれ? さっきの動画、ウィジェット出した後に画面が白っぽくなってない?」

ウィジェットを出たり入ったりした時にイベントが起きるんだけど、CanvasPanel全体じゃなくて、もっと狭い範囲でしか取得できない。というか、最低限の大きさのCanvasPanelしか作られてないのかも。それで四隅にアンカーつけた白っぽいImageを置いといたんだよ。完全に透明にしてもいいんだけどわかるように」

妹「透明のイメージだと、表示が遅くなるとかあるのかな?」

「単純なポリゴンだから、今のパソコンだと問題になるほどじゃないと思うんだけど、これに関してはもっと良い方法があるかもしれない。イベントが反応してくれればいいわけだから」