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

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

【日本語】 UE4 ホッケーゲーム part.16 マレット位置の修正、制限 【チュートリアル】

マレットは、マウスカーソルの位置に合わせてホッケーテーブル上を動くようになった。しかし、まだ、

  1. 半分埋まって動いている
  2. 枠の上にあがってしまう
  3. 敵陣にまで移動してしまう

という修正しなければならない点が残っている。

----------

簡単に考えれば、[1]は、マレットを表示させる位置のz座標を、いくらかプラスしてやれば解決する。[2]と[3]は、マレットの前後左右への移動範囲を制限してやれば解決する。では、ブループリントを書き直していこう。

  1. [Break Hit Result] の [Location] から直接 [SetActorLocation] の [New Location] へ繋いでいたが、[Location] から[Break Vector] を引き出す。
  2. [x] から [Clamp (float)] を引き出して、[Min:  -850]、[Max:  -50] に
    [y] からも[Clamp (float)] を引き出して、[Min:  -550]、[Max:  550] に設定
  3. [SetActorLocation] の [New Location] のピンを右クリして [Split Structure Pin] を選んで分解し、[z:  50] に設定

f:id:ore2wakaru:20160406011945j:plain

【追加の解説】

[1] ノードは範囲選択でも個別選択でもいいので、動かして新しくノードが追加できるスペースをとってくれ。必要なノードを割り込ませたい。ちなみに、線の接続を切るのは、ALTキーを押しながら左クリックだ。

[Location] というのは、[x]、[y]、[z]という3つの情報から成っているので、[Break ~] することで要素を分解表示出来る。[Hit Result] を [Break ~] したのと同じだ。こうすることで、[x] だけ、[y] だけ、[z] だけと、別々に内容をいじることが出来るようになる。

[2] [Clamp](クランプ、「固定する」っていう意味)というのは非常に便利なもの(ノード? 関数?)で、入力された値を、[Min] と [Max] で設定した最小値から最大値の間で制限して出力してくれるものだ。最小値より小さな値は最小値に「固定」されるし、最大値より大きな値は最大値に「固定」される。だから "Clamp" という名前にしたんだろうね。中間の値は、もちろんそのままの値で出す。入力値が少数点を含む値なので、[Clamp (float)] と "float" が入っている。

ここで、前後左右の移動範囲を制限した。

もし、[Clamp] というノードがなかったら、「もし、yが-550より小さかったら、yを550にして~、そうじゃなかったら~、yが550より大きい時は550にして~、xは~、、、」ってやらなければならないので、非常に面倒だ。そうやりたい人はやってもいいが、[Clamp] で一発なので、これを使った方が頭がイイと思う。見た目にもスッキリだしな。

それぞれの [Min] と [Max] に入れる値は、マレットの大きさと、テーブルの大きさ・座標を元にすれば簡単に出てくる。これで間違ってないか、確認してくれ。

[3] [SetActorLocation] の [New Location] も [x, y, z] で成り立っているので、分解して個別表示させよう。そうすることで、[2] で [Break ~] させた [x] と [y] を個別に繋げることが出来る。ピンを分ける方法は、図の下側にあるから見てくれ。

また、マレットが埋まらないように設定するのは、[New Location Z] の部分で行う。マレットの縦の長さは100cm、50cm分上げて表示させれば、ピッタリなはずだ。というわけで "50" が入っている。

----------

マウスカーソルがテーブルに重なっている時は、これでかなり良くなったが、外れると、まだ、テーブルのほぼ中央に現れるようになってしまっている。意外と、というか、かなり邪魔な感じがする。それでも、以前は [0, 0, 0] に出現していたものが、[Clamp] して [z] に下駄を履かせたので、[-50, 0, 50] に出ていて、そこは一応は自陣内。しかし、ポンと真ん中ら辺に移動するのもアレだ。マウスカーソルがテーブルにかぶっている時だけ移動するようにしよう。

  1. [Branch] ノードを出す。ショートカットは、Bキーを押しながらクリック。「Bクリ」
  2. [Get Hit Result Under Cursor by Channel] の [Return Value] と
    [Branch] の [Condition] を繋ぐ
  3. [Event Tick] から [Branch] へと、[Branch] の [True] から [SetActorLocation] へ
    白線を繋ぎ直す

f:id:ore2wakaru:20160406044854j:plain

【追加の解説】

[1] 右クリして "Branch" で検索してもいいし、何故か、"if" で検索しても出る。オススメなのがショートカットの「Bクリ」。Bキーを押しながら左クリック。出ないな~って時は、一旦、どこか空いている所をクリックしてから、再チャレンジで出る。

[Branch] は実行線をコントロール(フローコントロール)するノード。 [Condition](コンディション)に繋がってる値が "True"(トゥルー) の時に [True] のピンから、"False"(フォールス)の時は [False] のピンから出て行く。"True or False" って聞いたことあるでしょ。本当かウソかで、次に進むノードを選択し、流れを変えるために使う。

[2] マウスカーソルが何かに重なっている時(ライントレースがヒットしている時)は "True"。重なっていない時(ライントレースがヒットしてない時)は "False" になる。そして、その "True"、"False" の情報は [Return Value] から出力させるようになっている。

だから、[Return Value] と [Condition] を繋いだわけだ。マウスがホッケーテーブルの上にあれば、トレースがヒットして "True" になり、[True] から出て [SetActorLocation] に繋がる。マレットを動かすってこと。マウスがテーブル上になければ、何にもヒットしないから "False" になり、[False] には何も繋がっていないから、ここで実行は終了となる。マレットは動かさないっていうことだ。

[3] 実行線はちゃんと [True] から出してな。それから、繋がっている不要な線を外す時は「ALT+クリック」だから。余計なところから線が出たままになってないように注意。

----------

さあ、[Compile] して、レベルエディタから [Play] してみよう。マレットは華麗にマウスに追随して動くはずだ。マウスがテーブルを外れた時も、ま~、こんなもんだろう。

ということで、今回はここまで。次は、パックを出して打てるようにしていこうと思う。"Save All"。

.

.

xが縦方向、yが横方向ってなかなか、慣れないんだよな~。