Open10

猫でもわかるUE4 Part2 BluePrint

ふーりるふーりる

Blueprintが持つ機能

アルゴリズム ⁺ パーツの組み合わせ

パーツの組み合わせ

Componentと呼ばれるパーツを組み合わせて作っていく。

ふーりるふーりる

シミュレーション中に

シミュレーション中にF8キーを押すことで、ゲーム画面をシミュレーションしたまま、値を編集できる。
動画ではMoveSpeedを変更してから「K」を押して、シミュレーションを終了することで、値を保存したまま、シミュレーションを終了できるとなっている。

ただUE5.3のせいか?値を変更しても保存されない。
なんでか調べても分からない。とりあえず飛ばす。

参考

https://docs.unrealengine.com/5.3/ja/playing-and-simulating-in-unreal-engine/

ふーりるふーりる

BluePrintがひな形。
レベル上での、詳細パネルからの変更は個別の変更となる。

大本となるBluePrintを動かしつつ、必要に応じて、1匹だけ強くする(詳細パネル)といった使い分け。

ふーりるふーりる

アルゴリズム

  • どんな時・タイミング
  • どんな処理
  • どんな順番で実行するのか

TPCharacterの場合

ジャンプボタンを押すと、jumpActionを実行する。
(各ノードの詳細は複雑なので、説明しない。)

  • まとめて右クリックして、ノードをまとめることができる。
  • グラフを追加することで、新しいグラフを追加できる。
ふーりるふーりる

ブループリントとC++

Blueprint

  • 非エンジニアが触る部分。
  • 試行錯誤の速さを求められる部分
    • C++だと、実行中に変更ができない。

Unreal C++

  • システム寄りの複雑な部分
  • 非エンジニアにとって、ブラックボックスでもよい部分
    • ノード1個にまとめられていても、デザイナーなどが問題ない部分

パフォーマンスで問題になるのは、言語の問題でないことが多い。
アルゴリズム自体が悪いケースなどが多い。

ふーりるふーりる

BluePrintに最初から置かれているノード

よく使われるイベント。
どういう「時」が置かれている。

  • Event BeginPlay
    • BluePrintが初めて動いた時。
      • ゲーム開始時
  • Event ActorBeginOverlap
    • 何かと重なった時。
      • 例) あたるとダメージなど。
      • 次回詳細に説明する。
  • Event Tick
    • ずっと起こっているイベント
    • PrintStringNodeをつなげると、延々とHelloが表示される。
ふーりるふーりる

回転する床を実装する

パターン1Add Actor World Rotationを使う

パターン2 Get/Set Actor Rotation

現在の角度をGetして回転を足す方法

パターン3 RotatingMovementを追加する

追加しただけで、回転しだす。

右側の詳細パネルから、回転方向や速度を変更できる。

同じ動きがそれぞれできるがどう実装を選べば良いのか?

プロトタイプを作るときには、どの方法を使うのがベストか?を考えて作るのは気にしない。
手を止めずに作っていくほうが良い。

最初はどれが良い方法か?を気にせず作ったほうが良い。

気を付けるべきところは、いくつかあるが、初めからガチガチに固めちゃうと作り方が分からなくなってしまう。色々知ってから、取捨選択していくほうがよい。

まずは作るのを楽しむ。

Q.初期配置の床を動かすときはどうすればよいか?

FloorにRotatingMovementを追加する。
動かない場合は、可動性をチェック。
ムーバブル(動くもの)になっていない場合は設定する。

ふーりるふーりる

動く床を作る

RotateFloorをコピーする。

Add Actor World Offsetに変更し、Y+10にする。
移動してくれるようになったが、無限に進んでしまう。

変数を作成する。

Add Actor World Offsetの数値を変数へ昇格させる。

左側の変数からSpeedをD&D、SetかGetを選択してノードを設置することで使える。

変数化し、変数の目をONにすることで、レベル上で編集ができるようになる。

現在の位置を取得する。

Yの数値の変更0から1,200(例)を往復させるために、現在地をまず取得する。

Get Actor Locationを使う
Yだけ値が欲しいので、Value部分を右クリック「構造体ピンを分割」を選択。下記のように分割される。

IFを実装する

UEのBPでは、IFは「ブランチ」
(なんでIFじゃないんだろ。)
動画では、数値の比較を何でやってるのか分からなかった。
Node検索の状態で比較演算子(>,<,=)を入れることで出せた。

比較のYは適宜修正してください。

ふーりるふーりる

動く床を作る(Component)

Componentから動く床を作れる。

詳細タブから、InterpToMovementを追加する。

Control Pointsへ2つメンバーを追加する。
インデックス0 はそのまま
インデックス1 へY 1200を設定する。

こうすることで、上のDuration(インデックスを達成するのにかかる時間)に合わせて、インデックス0から1=Y0から1200へのアニメーションが実行される。

往復させるには、ビヘイビア>Behaiviour Typeを 「Ping Pong」へ変更することで、往復できる。