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

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

【日本語】 UE4 ホッケーゲーム part.20 パックの上限速度設定2 (normalizeの使い方)【チュートリアル】

変数を作り、それを利用してパックの速さを制限する準備が出来た。やりたいことはすごく単純で、

  1. パックの速さが "4000" を超えているなら
  2. パックの速さを "4000" にセット

ということ。1の条件成立時に、2の結果にすればいいので、[Branch] ノードを使って描ける。ドーンと一気に描いてしまうことにする。

----------

f:id:ore2wakaru:20160419163624j:plain

【追加の解説】

[図の上部]

[Sequence] ノードの [Then 1] から [Branch] ノードへ繋ぐ。この [Branch] ノードの [Condition] につながっている部分が上で述べた「1.条件」部分。「パックの速さが "4000" を超えているなら」のところ。パックの速さを表している [VectorLength] と変数で設定した上限の速さ [PuckMaxSpeed] を比較するので、">" 記号で比較のためのノードを出す。常識的に考えると、左右(左辺と右辺)で比較するのだが、UE4では上下で比較する。上が左辺に来る項目で、下が右辺に来る項目だ。ここは少し慣れが必要。もし、ここで比較した条件が成立している時は、[Branch] の [True] からの線を進むことになる。条件が成立していなければ、[False] の線を進むのだが、何もなければここで終わり、何もしないということ。

変数をグラフに持ってくる時は、[My Blueprint] の [Variables] から使用したい変数をドラッグ&ドロップ。マウスボタンを離すと、[Get] と [Set] の2つの選択肢が出る。[Get] は、今、変数にセットされているデータを利用したい場合に使う。[Set] は、今の変数に、新しくデータをセットしたい時に使う。もちろん今回は、"4000" という、今、入っているデータを利用するのだから、[Get] だぜ。俺的には、UE4の [Get]、[Set] は非常に分かりやすいと思う。ナイスだUE4。

比較する時は「型」を合わせる必要がある。[VectorLength] はfloat型なので、比較相手もfloat型。だがもし、[PuckMaxSpeed] をInt型(整数型)にしてた場合でも、UE4が勝手に変換ノードを出してくれるので、大丈夫と言えばダイジョウブ。

[図の下部]

[Branch] ノードの [True] からの実行線がつながっている部分。この部分が上で述べた「2.結果」の部分。[Set Physics Linear Velocity] は以前やった。アクタに速度をいきなり設定してしてしまうノード。忘れちゃってたら、見なおしてくれ。これで、パックの速さを "4000" にセットする。だが、今回注意しなければいけないのは、[New Vel] に入れる数値だ。

[New Vel] はvector型で、[PuckMaxSpeed] はfloat型。ここでもう、単に [PuckMaxSpeed] を直に繋げられないのは分かると思う。型が違うからな。欲しいのはvector型だ。しかも、大きさ(長さ)が "4000" のvector型だ。これは困ったぞ。そこで、どう考えるかというと、

  1. vector型で大きさ(長さ)"1" のものを用意し
  2. それを "4000" 倍する

と考える。ただし、単に大きさ "1" のベクトルならなんでもイイわけではない。パックの進行方向そのままのものでなければいけない。どうするか?

なんと素晴らしいことに、「方向を変えずに大きさ(長さ)"1" のベクトルを作る」ためのノードが用意されているのだ。それが、[Normalize](ノーマライズ) だ。よくもま~、ちょうど便利なノードがあるもんだと思う。

図のように、現在のパックの速度(velocity)をノーマライズ(nomalize)することで、大きさ(長さ)"1" のベクトルを作り出している。しかも方向は変わらない。それに [PuckMaxSpeed] (中身は "4000")を掛けると、パックの進んでいる方向を変えないで、速さを "4000" 倍にすることが出来ている。すごいぞ!ノーマライズ

----------

というわけで、物理を使ってゲームを作る時の必須とも言えるノードを幾つか紹介できたと思う。[Set Physics Linear Velocity]、[Get Velocity]、[VectorLength]、[Normalize] などなど。ぜひ覚えて欲しい。

コンパイルして、[Play] 。どうだろうか、これでパックがぶっ飛んでいくことがなくなったハズだ。ま、それでも、壁を抜けることもあれば、マレットを抜けていくこともあるけど・・・、物理なんてそんなもんだと思ってくれ。

それから、俺は消しちゃったけど、色んな所に [Print String] して見たいデータを画面にログ表示させてみてほしい。パックの速度を変える前とか後とか。ご自分のゲーム作成時に役立つはずだ。あと、下向きの三角形(▼)をクリックすると、色も変えられるぞ。では、今回はここまで。また。

"Save All"。