
初心者ゲームつくる:ボールが跳ね返る仕組み【UE4編】
前回の続きです。
なんとかボールを動かすことができました。今回はボールが壁にあたると跳ね返るということをやりたいと思います。
注意点としては、物理学をもちいた現象ではなく、壁に当たると跳ね返るという仕組みをつくるということです。それではいってみましょう。
最終的にはこういうノードを作成していく。
まずはどう考えるか?
壁にあたったることで何らかのイベントを発生させ
それまで進んでいた方向を変換すればよい。
難しいのは、都合よく変換してくれる関数があるか?
あるんですw。「mirror vector by normal」というノードを使うとそれができそうです。
mirror vector by normalを詳しく見てみる
ドキュメントはこう書かれてます。
Given a direction vector and a surface normal, returns the vector reflected across the surface normal. Produces a result like shining a laser at a mirror!
方向ベクトル と サーフェス法線 入力すると反射された数値を返してくれるという便利な関数です。
方向ベクトルは New Var0 ですね。
法線ってなんやねん。
Normalであり、ポリゴンが向いている向きになります。図ですと。
進行ベクトルは、「New Var0」で法線ベクトルが hit Nomal となる。
具体的にみてみましょ。
New Var 0
画面右にすすめるイメージでこういう風に入力。
アクタにふれるとトリガーが動き
反射ベクトルを、上の方は数値を増加させるノードになります。
できました!
備考:
この部分について解説をしておく。わすれるので。
黄色の変数は 方向で緑にはスピードと考えると上のノードは、壁にあたった際に発生する。緑の数値を変化させているノードになります。
New Var1にはデフォルトで設定した数値が入っており、
それに対して50を足す、次にあるのは2つの数値の最小数値を投げるというノードなんだが、「MIN」といれるとでてきます。
意味的には何度跳ね返ってもこれを入れることで 300が最大スピードとして限界を固定できるということですね。ためしに、リミットを外してみた動画をみてみましょう。
設定を次のように変更しております。
New Var 0
New Var 1
跳ね返るごとに加算していく数値 と 最大数値の設定