今回は以下のガイドの3までの導入を目標とする。かなり平易に書かれているため、リンク先を読むだけでStateTreeの学習の下準備が終わるだろう。なお、この投稿の記述時に使っているバージョンは5.4.4。
https://dev.epicgames.com/documentation/ja-jp/unreal-engine/statetree-quick-start-guide
目的
このガイドでは、State Tree を使用して、プレイヤーが撃って破壊できる移動するターゲットを作成します。
目標
プレイヤーが撃って破壊できるターゲット アクタの ブループリント を作成します。
ターゲット アクタを移動および破棄するロジックを含む State Tree を作成します。
State Tree Task を作成し、それらを State Tree で使用します。
State Tree Evaluator を作成し、それらを State Tree で使用します。
ここで引っかかる人はST_ShootingTargetを開いて
ここのドロップダウンがStateTreeComponentであることを確認しよう。なお、変更したら保存をしてCompileボタンを押して反映させる必要がある。
ここにさえ引っかからなければおそらくStateTreeを触る段階まで来れるのではないだろうか。
雑多な補足
StateTreeとあんまり関係ないが、せっかくなのでいくつか。
英語表記になっていないことで、ガイドに書かれている項目を探すのに時間がかかってしまうことがあるが、言語設定を英語に変えることで、同じ表記にすることができる。
日本語でなくなるデメリットもあるが、海外のTipsを読みつつ作品を作るときはこっちの方がいいと思う。
念のため自分で作ったものを新規で作ったAdditionalフォルダに分けておいた。サンプルなので中身が見られる反面、考えなしだとごちゃごちゃになる。
ファイル名規則について。
ST_XXXXXX
BP_XXXXXX
のように、UnrealEngineではファイル種別を2文字に略し、アンダーバーをつけてからファイル個別の名前を付けるのがプロアマ問わず一般的。UE村の因習なので他では大体通用しない。フォルダ分けが甘くても検索で当てやすいあたりがメリット。
State(ステート)=状態。
Schema(スキーマ)=構造。
大した意味ではないが、しれっと使われる上に知らないと何のこっちゃとなるので覚えておいた方がいい。
BluePrintとC++によるコーディング実装について。
大体ガイドはBluePrintで書かれているが、C++で実装することもできる。やれることはほぼ同じだが、両方にメリットとデメリットがあり
- 機能の検索性
BluePrintは数文字で機能を絞り込めるが、C++だと厳しい。 - ビルド時間
BluePrintはエディタ上で勝手にやってくれるが、C++だとビルド、UE再起動で時間がかかる - メモリ解放
BluePrintは勝手にやってくれるが、C++はメモリ解放を書かないといけない。逆に言うと変なタイミングでGCを走らせられない(変なところで一瞬固まったりしない)ということでもある。 - 処理速度
基本的にC++のほうが速いと言われている。 - バージョン管理
BluePrintはバイナリファイルなのでマージが困難。C++はテキストなので大体は自動的に処理できる。BluePrintが集団開発に向かないと言われるのはこれが10割。
とどちらがいいとは言い切れない。
BluePrintの方が初心者にわかりやすいが、それでもある程度のプログラム知識は必要である。また、BluePrintとC++の変換はかなり面倒くさい(実質作り直しになる)。よって途中での切り替えは推奨しない。連携は容易なため部分によって使い分けるのは十分可能。