【UE5】ステートマシン

この記事は約6分で読めます。

スケルタルメッシュアニメーションシステム

Just a moment...

このスケルタルメッシュアニメーションシステムのページから、今まで触れてこなかった最初のものがステートマシン。何度かアニメーションシーケンスってのを作る必要がありそうだとか言った覚えがあるが、俺の勘違いでステートマシンのことだった。アニメーションシーケンスは何かのモーション1つ1つのことになるらしい。シーケンスだから複数あるものをどうにかすることだと思っていたんだが。いや、アニメーションシーケンスも作らなきゃならないんだが、こないだ作った走るアニメーションは既にアニメーションシーケンスということになる。それらをどう使うか決めるのがステートマシンなんだと思う。

ステートマシン

Just a moment...

ステート マシンを使用すると、ステート を作成し、そのステートで再生するアニメーションを定義して、他のステートに切り替えるタイミングをコントロールするさまざまなタイプの 遷移 を作成することができます。これにより、過度に込み入ったアニメーション グラフを使用しなくても、複雑なアニメーション ブレンドを簡単に作成できます。

素晴らしい。アニメーションのブレンドも作れちゃう。

遷移を作成するには、ステートの枠線から別のステートにドラッグします。この例では、Idle ステートRun ステート と双方向に接続されています。これは基本的なロコモーションのステート マシンでは一般的な設定です。遷移は一方向であるため、2 つのステートを往復させる場合は、各方向に遷移を作成する必要があります。

この中のロコモーションというのが分からなかったんだが、ググってみるとキャラクターの移動のことになるらしい。moveじゃないの?という気がするんだが、ちょっと違うみたい。

ロコモーション

locomotion
名詞
移動力
the power or ability to move.
動くための力、能力。
言い換え
motivitymotive power
歩行運動
self-propelled movement.
自己推進による運動。
言い換え
travel

https://www.ei-navi.jp/dictionary/content/locomotion/#:~:text=%E5%8B%95%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E5%8A%9B%E3%80%81%E8%83%BD%E5%8A%9B%E3%80%82&text=self%2Dpropelled%20movement.,%E8%87%AA%E5%B7%B1%E6%8E%A8%E9%80%B2%E3%81%AB%E3%82%88%E3%82%8B%E9%81%8B%E5%8B%95%E3%80%82

遷移のルール

ステートマシンで状態の遷移ができるが、遷移のルールは次にある。

Just a moment...

この中にアニメーション通知というものがあって結構重要かも。

アニメーション通知

Just a moment...

この辺りを駆使して攻撃時のエフェクトとかやるわけだ。まだNiagaraシステムとか全然勉強していないが。

【Blender】ちゃんと使えたBetter FBXアドオン【UE5】の中で、自前のアニメーションシーケンスに差し替えると、アニメーションがちょっとおかしいと言ったが、それは次の同期マーカーというもののせいだったみたい。

同期マーカー
Sync Markers (同期マーカー) は、 マーカーベースのアニメーションの同期 を通知するために使用される通知で、複数のアニメーションをブレンドして全体のモーションが同期した状態を維持するのに役立ちます。スケルトン通知 と同様に、同期マーカーはスケルトン アセットに保存されるため、同期マーカーを追加する際にはスケルトンを保存する必要があります。ブレンド時に同期する必要のあるアニメーションでは、同一の同期マーカーを繰り返し使用することができます。

アニメーション同期グループ

同期マーカーの詳細については次を読めとある。

Just a moment...

アニメーション ブループリント でのブレンド動作を向上するために、同期グループ (Sync Group) を使って、関連するアニメーションの長さと再生をブレンド時に自動的に同期できます。異なる長さの歩くサイクルと走るサイクルの間でブレンドを行う場合に便利です。そのような場合に、同期グループを使用せずにサイクルからもう一方のサイクルに直接ブレンドすると、足の位置が同期しないことで不自然な動きとなる可能性があります。

間違いないな。自前のアニメーションシーケンスにはこれが無かったせいで歩き出しが不自然になったんだ。

下手にWalk→Runのブレンドとか無い方がおかしなことにはならないのかもしれない。

まだ攻撃時の処理、コリジョン判定だとか、攻撃を受けた時の処理なんかをどう実現するのか全然考えたことがなかったんだが、考えてみれば走っている最中に攻撃を受けて吹っ飛ぶ場合にどうすればいいのか?アニメーション通知でやればいいのかな?

コンジット

コンジット
通常の遷移がステート間の 1 対 1 の遷移であるのに対して、コンジット では 1 対多、多対 1、多対多の遷移を行うことができます。このため、コンジットはより高度で共有可能な遷移リソースとして機能します。

1対1の遷移よりも、このコンジットって方が普通に使うことになるんだろうか?攻撃Aというアニメーションがあったとして、アイドル状態だろうと走っている最中だろうと攻撃Aができる場合は遷移できなきゃ困る。そもそも、どれくらいの状態の数が必要になるんだ。結構複雑になりそうな。攻撃中に崖から落ちるとかも?うーん。いろいろ作って試してみるしかなさそうだ。

ステート エイリアス

単純なミスなんだろうけど、日本語ドキュメントにはステータスエイリアスと見出しが付いていた。ステートにエイリアスを付けて纏められるらしい。

コメント

タイトルとURLをコピーしました