見出し画像

初心者ゲームつくる:ボールを動かす仕組み【UE4編】

UE4でボールを動かそうとすると、やはり前提知識が必要。
ベクトルについて、変数、型についてなどプログラムの基礎知識、UE4特有の話などある。前フリでこころが折れそうだが、この記事では、UE4のノードにフォーカスしてわかりやすく説明します。プログラムのメカニズムの話。前提知識などは別記事で解説していくようにします。※後日

参考記事

これが参考になるかなと思うので、こちらを参考にしてみた。

前提の前提として、UE4でボールをレベルに置くなども後日。
参考:基礎アクターをレベルに置く。

画像1

ボールが動くメカニズム

まずは、「ボール」を移動させるには?というお題を
どう考えたらよいだろうか。

ゲームが始まったらボールを移動させる。
しかも、プレイヤーがボールを直接動かせない
ボールを移動させるには、力を加える。
または、位置情報を更新していく。
こういう風にどう動かすか?を考えて取り組まないと、
サンプルがあったとしても応用できない学びになる。

ノード(関数)は知らないと使えない

UE4でプログラムをするためにはブループリントを知らないと始まらない。
ノードは関数。
僕は、関数とは呪文みたいなものと想像する。
UE4では、位置をセットするのは「Set Actor Location」ノード。
こういったノードがあるということは、最低限覚えない使えないし、
最初の壁、しらいない呪文がいっぱいあるからだ。

ドラクエで言えば ホイミの意味しらないと使えないのと一緒。

どのノードを使うかわかれば、ドキュメントを調べるとよい。
https://docs.unrealengine.com/ja/index.html
※まぁでも調べないよね。

Set Actor Locationの詳細は?

画像2

ノード(関数)は、inとoutがある。

Targetは対象とするアクターをつなげる。
New Location 位置情報 New というのが肝ですね。次のロケーションデータを入れたらアクターが移動する。
Vector型、3D 空間における位置XYZを表す3 つの Float 値をセットで扱う。

Sweepってなに?Teleportって何?
Sweepは、ターゲットが物体にぶつかるとターゲットは停止
Teleportは、テレポーテーションですね。瞬間移動。
ってことは、New Locationは位置データをなげたら、そこまで移動するプロセスがあるということかな。

Sweep Hit Result
ぶつかったら「Hit Result Structure」を返してくれるみたい。

Return Value
こちらも「Boolean」型を返してくれる。
移動が成功したらtrueを返してくれる。

今回使うのは、Target、とNew Locationのみ。Sweepも使うかな。

どこにこの機能を書くか?ノードはどこに記述?

ざっくりと概要を確認してきたが、

このメカニズムを記述したら良いのだろうか・??
ボールの動きなので、ボールに新しい機能を足すと考えて、
ブループリントを追加して動くメカニズムを記述していきます。
動かすアクターとは別に、レベル=ステージに機能を追加するレベルブループリントもある。

ボールを動かす仕組みを細かくみていく

位置を取得するには「Get Actor Location」ノード
を使って現在の位置を取得。
次のその現在位置のベクトルとベクトルの足し算をして、
「Set Actor Location」ノードでボールを動かす。


単純な仕組みで確認していく。

画像12

現在位置を「Get」で取得したあとに、
取得したVectorにVector(Zに1を足している)を加算する。
これを行っているのが図の上の2つ。

赤色の「Event Tick」をつかうことで、
Zに1足すことを毎フレーム実行することによって
ボールが上に動くということになる。

XYZを使うことでどの方向に動くか?操作することができる。
現在の位置をとってきて、
進めたい位置の数値を足せば進む方向が変わるという仕組み。

始まりの起点となる「イベント系ノード」とは?

動かすノードはわかったが、始まると同時に動かすってどうやるか。
ゲームが始まるというだけでなく、特定のイベント起動するときにも使う。
あらゆるノードの起点となり、色は赤。

イベントのトリガーになるノードがいくつかある。
・Event BeginPlay
・Event Tick
・CustomEvent
ここでは、「Event Tick」をつかうことで、毎フレーム実行することになる。
参考:Delta Secondsについて

変数を使って方向をコントロール

画像13

次に
現在位置に加算する数値を2つの変数にする。
Var0 Var1という2つを設定、
Var0はVector型の方向。
Var1はFloat型の数値でイメージとしてはスピード(長さ)

方向☓スピード=ベクトル

参考:ハードコーディングについて
参考:型について

無事、ボールが動きました。




この記事が気に入ったらサポートをしてみませんか?