妹でもわかるUnrealEngine4

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

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

じゃんけんをするゲームの予定図

f:id:una_unagi:20170521225508p:plain

「とりあえず操作は作れそうな感じになってきたから、本格的にじゃんけんをしたいんだけど、今回はちょっとややこしいので、まず想定してるゲームの流れを図にしてみた」

妹「ややこしいの? じゃんけんなのに?」

「今回は遅出しアリにしようと思ってる。相手が出した後、勝敗が確定するまでのしばらくの間はこっちの手が出せるから、相手の手を見てから出していい。逆に相手より早すぎると必ず負ける。相手がこっちの手を見て変えるから」

妹「ややこしいかもしれない」

「3つのボタンを押すと、敵が手を出して勝負という方が仕組みとしては簡単。おみくじとか占いと同じ感じになる」

妹「これだとアクションゲームになるのかな?」

「ジャンルはわかんないけど、色んなもののタイミングが重要になる。なので、ゲームの流れと、それと並行して操作やエフェクトを出すタイミングがわかる図を作った。最初は紙に書いたんだけど、良い図を作るツールがないか探してみたら、draw.ioというのが良さそうだったから使ってみた」

Flowchart Maker & Online Diagram Software

「ブラウザ上で動くという、最近よく見かけるようになったスタイル。ファイルは自分のパソコンにも保存できるし、ネット上にも保存できる。ただdraw.io自体には保存場所ないから、GoogleDriveとか別のサービスと連動させて保存する仕組み」

自作マウスカーソルをウィジェットとして表示する・第2弾 #UE4

※現在はもっといい方法が見つかっています
imoue.hatenablog.com


imoue.hatenablog.com
imoue.hatenablog.com

「自作のイラストを使ったマウスカーソルを作る、というのは前にもやったんだけど」

妹「やった気がする」

「今日やるのもだいたい同じ、ウィジェットを使う方法なんだけど、もうちょっと良い方法を見つけた」

f:id:una_unagi:20170519222837p:plain

「前回はマウスカーソル入りのウィジェットがあって、その中のカーソル画像ウィジェットを動かすという考え方だった。今回はマウスカーソルを完全に独立したウィジェットとして作ってる」

f:id:una_unagi:20170519224440p:plain

「別々にウィジェットを生成して、別々にAddToViewportする。これでボタンのウィジェットと、カーソルのウィジェットが別々に追加される。そのままだとクリックした時にカーソル自体が反応するから、可視性の設定で反応しないようにしておく」

妹「でも、それだとどっちが上かわからなくなるのでは? カーソルが下になったらあれだし」

「あれしないように、AddToViewportにはZOrderというパラメータがある。普段は三角ボタンで折りたたんであるけど、ここに数字を入れると、重ね合わせ順を操作出来ることがわかった」

f:id:una_unagi:20170519225735p:plain

「マウスの移動操作は、GameModeの中のブループリントに書いてある。Tickの中でカーソル位置を調べて、ウィジェットを動かしてる。この方法の利点は他のレベルでも同じようにカーソルが出せるというところ。使うウィジェット全部にカーソルを入れて回る必要がないし、別のゲームでの使い回しもやりやすい」

妹「操作がGameModeの中ということは、マウス操作の設定としてはSetInputModeGameAndUIにしてるの?」

「今回はSetInputModeUIOnlyにしてる」

妹「??? それってウィジェットにしか反応しないという噂だったのでは?」

f:id:una_unagi:20170519230949p:plain

「SetInputModeUIOnlyにあってる時は、こういう感じのインプットアクションや、インプットAxis系イベントは無効になる。ただ、今回使ったのはTickイベントで、それは普通に動く。そしてマウス位置の取得も出来る。ウィジェットの移動にも当然問題ないから、UIOnlyでも自作カーソルは動かせることになる」

妹「うーん、でもそれってなんか、マウスカーソルだったらいいけど、動いちゃいけないやつも動かせてしまいそうな」

「そのへんは作り方次第だから。そういう特別な意図が無い場合は、Tickの中でマウスやキーボードの処理をしない方がいいと思うけど、必要な時は抜け道として使える」

※体調不良のため翌日分の記事はお休みします

不思議なマウスカーソルの挙動 #UE4

f:id:una_unagi:20170518223440p:plain

ウィジェットを使う時にどうしても考えないといけないのがマウスカーソルの問題」

妹「それはなんか前に少し調べたような気がする。自分で作ったカーソルを表示する方法とか」

「今回あらためて調査したんだけど、実際問題としてよくわからなかった。これはバージョン4.15.2時点の記録。まずウィジェットに対してマウス反応するかどうが、という点で、みっつの選択肢がある」

「このうち一番変なのがSetInputModeGameOnlyのケースで、ウィジェットをクリックできてしまうケースがある。具体的には、SHIFT+ENTERで、いったんカーソルをゲーム外に出して、もう一回ゲーム画面をクリックした時。そのクリックした地点にウィジェットがあると、クリックできてしまう。それ以降はカーソルは表示状態で、SetInputModeGameAndUIのような動きに変化する」

妹「ウィジェットに反応したらダメなのでは……」

「一応回避策は見つかった。ウィジェットのIsFocusableのチェックを外しておくと、そういう不思議な動作は起こらなくなった」

f:id:una_unagi:20170518231446p:plain

「ここでいうfocus(フォーカス)というのは注視点とかのことじゃなくて、操作対象になるということ。ブラウザのアンケート欄とかに書き込む時に、マウスで入力欄はここって指定するでしょ? あれはその入力欄にフォーカスがあるという状態」

妹「それは知らなかった。でもボタンにフォーカスがあると何かいいことが?」

「その状態でキーボードに何か入力すると、フォーカスがあるウィジェットに対する操作、という扱いになるはず。ただキーボード使わずに全部マウスで操作するならこれは要らないはずだし、キーボードとか使う場合でも自分で色々細かく指定する場合もやっぱり要らないはず」

妹「それは……要らないのでは?」

「何かフォーカス絡みで思うように動かない箇所が出たら、チェックしないといけないこともあるのかもだけど、今のところはチェックは外しっぱなしで良さそうに思える」

f:id:una_unagi:20170518232142p:plain

「もうひとつ、SetInputModeGameOnlyなのにウィジェットをクリックできてしまうケースがあって、それはマウスカーソルを表示にしてる場合。1度ウィジェットがある場所をクリックすると、それ以降はやっぱりSetInputModeGameAndUIみたいな動作になる」

妹「全然GameOnlyじゃないね」

「これについては解決策が見つかってない。InFocusableを外してても関係なく起こる。カーソル非表示にして、自作カーソルを表示するぐらいしか手がなさそう」

f:id:una_unagi:20170518232517p:plain

「残りの2つのモードについては今のところ大した問題は起きてない。ただやっぱりInFocasableは外しておかないと、非表示のカーソルが出てきたりはする」

妹「まあでもクリックできるウィジェットがあるってことは、クリックしたいってことだから、SetInputModeGameAndUIとかになるのかな?」

「普通はそうだと思う。クリックできないウィジェットなら問題は起きない。クリックできなくていい物まで反応しちゃう場合は、可視性の設定のところで変更出来る」

f:id:una_unagi:20170518233116p:plain

「SetInputModeGameAndUIには1つ問題があって、GameOnlyだとマウスを動かすだけで視点が動いてたのが、GameAndUIだと一度クリックした状態、つまりドラッグ状態じゃないと動かせなくなる。これは仕様なのかバグなのかよくわからないところ」

妹「うーん、前も悩んだようなきがするんだけど、普通に今まで通り動かせて、それ+でウィジェットだけクリック出来るようにはならないのかな?」

「それを上手くやる方法は見つかってない。GameOnlyでカーソル表示させて、ウィジェットをクリックした瞬間にGameOnlyに戻す案のもダメだった。戻そうとしても戻らない。いっそUIOnlyにして、UIからアクター側を動かす仕組みにするとかの方が可能性あるかも。それが操作しやすいかどうかって問題はあるんだけど」

妹「そうはいわれても、自分で動かしてみないことには、操作しにくいのかどうだかよくわからないんじゃよ」