俺に解るように説明する "Unreal.Engine.4" 入門+

UnrealEngine4とかチュートリアルとか入門とか

【日本語】 UE4 ホッケーゲーム part.14 3D座標上でのマウス位置にアクタをSet 【チュートリアル】

自作の[GameMode]の話、大事だから、結構長くなったけど、大丈夫だったかな? それから、再度、ダブルクリックで開いてみると以下のようになってるハズ。何か変だぞーって思うかもしれないケド、安心して下さい、ちゃんと履いて・・・、イヤイヤ、

f:id:ore2wakaru:20160404063152j:plain

ブループリントにデータしか"入って"ないと、こうなるようだ。[Open Full Blueprint Editor]って所を押せば元に戻る。(戻しても、またこうなるけど。)それから、[DefaultPawn]は消したけど、残りのものはEPICさんのデフォルト設定を残しておくからね。

それでは、先に進もう。

----------

エアホッケーでは、タマのことをパック(puck)、手に持ってそのパックを打ち返す道具をマレット(mallet) と言うらしい。今回は、このマレットの方を動かしていくことにする。マレットは、かなり以前に、2面に置いたスタティックメッシュのシリンダーを使う。

キーボードで動かしてもいいが、より直感的にマレットをガツンと動かしたいので、マウス操作で動かす。マウスが示した場所にマレットを持っていくようにするのだ。そのためにはマウスの位置を把握しなければならないが、2D画面上のマウス位置ではなく、当然だが3D座標上のマウス位置を把握しなければならない。

なぜなら、2D画面上のマウス位置にマレットを移動させても、それは、空中でマレットがフワフワ宙を舞っているだけで、パックを打ち返すことは出来ない位置を動いているだけだからだ。ゲームでは、ホッケーテーブル上でマレットを動かすのだから、本当に欲しい情報は、マウスカーソルホッケーテーブルのどの位置にブチ当たっているかという情報だ。

幸いなことに、この情報を得るとても便利なノードがUE4には用意されている。[Get Hit Result Under Cursor]というノードだ。すばらしいぞUE4。簡単に説明すると、このノードは「マウスカーソルがカメラから見た時、何かアクタに重なっているかいないか、そしてもし重なっているならどんなアクタで位置はどこか」というような情報を教えてくれるものだ。

早速使ってブルールプリントに書き込もう。もちろん2面だ。

----------

  1. 以前作ったシリンダーの1つをリネーム、なんでもいいんだけど、
    "Mallet_Player"にしてみた
  2. 名前が変わったら、"Mallet_Player"を選択したまま(ハイライトさせたまま)
    "LV_2_Game"のレベルブループリントを開き、空いている所で右クリ
    "Create a Reference to Mallet_Player"を選択
  3. "Mallet_Player"のノード(リファレンス)が出る

f:id:ore2wakaru:20160404085204j:plain

  1. [Mallet_Player]から引っ張って、検索・選択"SetActorLocation"
    [Event Tick]と白線を繋ぐ
  2. また、空いてる所で右クリ、
    お馴染みの"Get Player Controller"
  3. そこから、"Get Hit Result Under Cursor"を検索して選択
  4. これの[Hit Result]から引っ張って離すと、一番下に
    "Break Hit Result"が出るから、選択
  5. [Location] と [New Location] を繋ぐ

f:id:ore2wakaru:20160404120938j:plain

【追加の解説】

[1] 2面を作った時にシリンダー(Cylinder)を2つ置いたと思うが、その1つをプレイヤーのマレットに、残りの1つをコンピューター側のマレットにしようと思っているので、1つ使う。消しちゃった人、作ってない人は、新しくシリンダーを追加してくればいい。分かりやすい名前を付けて管理する。

[2] カメラを固定させる時にもこの方法をとって、リファレンスを取得した。レベルブループリントで右クリする前に、しっかりレベルエディタ側で指定しておくことが大事だったな。今回は、マレットとして動かすアクタ情報が必要。故に、マレットのリファレンスを持って来ている。「リファレンス指定」、超重要。

[3] こいつがあるから、情報が引き出せるわけだ。

[4] [SetActorLocation]というのは、文字通り、アクタの位置を[New Location]で指定した位置にセットするというノード。全く文字通り。分かりやすいったらありゃしない。

[5] お馴染みの[Get Player Controller]。本当によく出て来るでしょ。つまり、こいつが何者か分かってないと、ゲームは出来ないっていうことだ。今回もマウス関係の処理を行うから、こいつが呼ばれているっていう感じだ。

それから、2面に入って、EPICさんが準備した[DefaultPawn]は消してしまったが、[PlayerController]の方はそのまま残して使っているから、その辺、覚えておいてくれな。あれだったら、もう一度、"ZZ_GameMode"で確認だ。

[6] これが今回の目玉だ。先にも書いたが、画面から見た時、マウスカーソルが重なっているアクタの情報を教えてくれるノードだ。非常に便利。

[7] そして、[Hit Result](ヒットリザルト、つまり「当たった結果」と言う意味ね)にその情報が出力される。非常に多くの情報をいっぺんにアウトプットしてくる。個別の情報を得たい時は、このように[Break ~](ブレイク)して使うんだ。アウトプットされる情報がずら~と並んで混乱するかもしれないが、よくよく英語を見れば、なんとなく分かったりする。その中で一番よく分かっちゃうのが、今回利用する[Location]ではないだろうか。もちろん、ブチ当たった「位置」情報のことな。しかも3D座標上の位置だ。便利だろ。

初心者に役に立つかは、甚だ疑問だが、ここ"Unreal Engine | Break Hit Result"を見ておくのも、今後の勉強になるかもしれない。どーでもいいけど、英語は勉強しとけよ。

[8] マウスカーソルホッケーテーブルに重なった時、当たった位置は[Hit Result]の[Location]で教えてくれるから、そこにマレットも持っていけばいいことになる。だから、[Location]と[New Location]がつながっているわけ。簡単だ。

----------

さあ、どうだ。これで理論的にはホッケーテーブル上にマウスカーソルが重なっていれば、その位置にマレットが置かれるはずだ。マウスが動けば、マレット動く。うむ。

では、[Compile]してレベルエディタから[Play]してみよう。どうだ、どうだ、どうだー。

f:id:ore2wakaru:20160404131419j:plain

動かねー!

ということで、原因は次回から探っていこう。今回はここまで。

ちゃんと"Save All"な。また。