🐷

【UE4】しゃがみの実装方法(マルチプレイにも対応)

2022/03/26に公開約2,800字4件のコメント

しゃがませるまでの手順

1. Characterの設定

しゃがませたいキャラクターのブループリントを用意してください。
そして以下のようにノードを組みます。

ノードの説明

インプットアクションCrouch
あらかじめアクションマッピングで設定したものです。しゃがませたいキーに置き換えていただいて大丈夫です。
Is Crouched
Characterクラスに元から用意されている変数です。(ノード検索でget is crouchと検索すると出てきます。)
マルチプレイ対応されているため、レプリケートのアイコンがついていますね。
Crouch
しゃがませたい場合は、「Crouch」という関数がキャラクターに元から用意されています。
これを利用すると、コリジョンが半分の高さになり、カメラもちゃんと下がってくれます。
Un Crouch
立ち状態に戻したい時用に 「Un Crouch」 という関数も用意されています。

しゃがみをトリガーに呼ばれるイベント

また、しゃがみをトリガーに呼ばれるイベントが用意されています。もしかしたらどこかで使えるかもしれません。
Event OnStartCrouch
しゃがみの開始時に呼ばれる。
Event OnEndCrouch
しゃがみの終了時に呼ばれる。

2. Character Movement の設定

Character Movementのナビゲーションムーブメントの項目にあるCan Crouchにチェックを入れます。

3. アニメーションブループリントの設定

Characterに紐づかせたアニメーションブループリント側の設定になります。
ThirdPerson_AnimBPを使用しています。

■イベントグラフの設定

・変数を用意

変数名:Is Crouching?  型:Boolean
変数名:BP Chara Base   型:Characterを親クラスに持つブループリントクラス


まず、初期設定でキャラクター用ブループリントにキャストし、用意した変数に格納します。
マルチプレイでの注意点なのですが、Try Get Pawn Ownerを使わずGet Player Characterなどを使うと、うまく反映されない可能性があります。Get Player Characterの「0」という数値はListen Serverなどではサーバーの人を指すため。

・Blueprint Update Animation での設定


Speedの変数を設定している箇所にしゃがみ用の処理を付け足します。
キャラクタークラスが保有しているIs Crouchedの値を取得し、アニメーションブループリント内の変数 Is Crouching? に値を格納します。

■アニメーショングラフの設定

しゃがみアニメーション自体はこちらの無料アセットから用意します。

https://www.unrealengine.com/marketplace/ja/product/28fc3cc4332541e3b0037d67a65e5d6d

Crouchはしゃがみ中の待機モーション
CrouchMovingはしゃがみ中の歩きモーションです。

遷移条件

Idle/Run => Crouch
Is Crouching? が true なら遷移
Crouch => Idle/Run
Is Crouching? が false なら遷移
Crouch => CrouchMoving

CrouchMoving => Crouch

必要な設定は以上になります。
ここら辺の設定を済ませておけば、しゃがみができていることと思います。

Discussion

すいません。イベントグラフの設定からあまり分からないのですが詳しく説明していただけませんか?

キャラクターのMeshに紐づいている「Animation ブループリント」についてはご存じでしょうか?
まず、Kentsさんの「Animation ブループリント」の理解度(ステートの追加はわかる等)や具体的にこの言葉の意味がわからない等、教えていただければ適切に答えられると思います。

この機会に「Animation ブループリント」についてさらっと説明しますと、
「Animation ブループリント」内には、「イベントグラフ」、「アニメーショングラフ」というものがあります。
イベントグラフ
キャラクターが走っているか、落下中かなどの状態を変数に格納したりする場所
アニメーショングラフ
イベントグラフで設定した変数の値をもとに、Walk=>Jumpみたいにアニメーションのステートを管理したりする場所

返信ありがとうございます。一応調べて別のやり方をまねることは出来ました。私の場合イベント blueprint initial animation が見つけられず悪戦苦闘していました。また、speedの変数がue5ではgrandspeedになっていたのも少し厄介でした。

実装できたようで何よりです。
確かにblueprint initial animationは最初から用意されているわけではないですもんね...
今後の記事のため、参考にさせていただきます。

ログインするとコメントできます