【UE5】シーケンサーでの演出途中からプレイヤーキャラクターを動かしたい【プロジェクト配布】
やりたいこと
A.シーケンサーでPlayerCharacterを動かしたい
B.途中まではシーケンサーで動かして、途中からはプレイヤーによって動かしたい
C.最後はシームレスにプレイヤーカメラに移行したい
結果だけ先に展開。
はじめに歩くモーションの演出があり途中から自由入力
環境
- UE5.3.2
- ブループリントプロジェクト
- ThirdPersonTemplate
実装
シーケンサー
レベルにレベルシーケンスを配置。
カメラ・ThirdPersonCharacterをSpawnableに配置
Spawnable=シーケンサー動作中にSpawnする設定。イナズマのアイコンが目印。
このカメラはのちにBPからViewTargetとしてセットするため、ActorTagを仕込んでおく
"SequencerCamera"
コンテントブラウザからThirdPersonCharacterをシーケンサー内にドラッグドロップするとSpawnableとなる。このトラックにはのちにBPからPlayerCharacterをバインドするため、ObjectTagを仕込んでおく。ObjectTagは上記のタグとは異なり、シーケンサー関連の機能で使うためのタグ。
"Player"
カメラ・ThirdPersonCharacterにキーフレームを設定
カメラにTransformを、ThirdPersonCharacterにアニメーションとTransformを設定する。
このとき SectionRange(緑の斜線のバー) に注意すること。
カメラのTransformやCameraCutsのSectionRangeはEndTimeまで続くようにする。
画面中央を見下ろしながら旋回するTransformのキーフレーム
ThirdPersonCharacterの各トラックでは、SectionRange中はプレイヤーの入力を受け付けないため、SectionRangeを良い感じに調整する。
歩きモーションと前進させるTransformのキーフレーム。シーケンサーの途中でトラックが終わるように設定しておく
Transformはデフォルトでは無限にバーが続くようになっているので、プロパティからSectionRangeのロックを外し直接指定する。
また、TransformのプロパティからWhenFinishedをKeepStateに設定する。トラック終了後もその位置からキャラクターの動作を始めさせたいため。
レベルBP
先に全容。今回はLevelSequenceActorをレベルに直置きした状態で始める。
以下それぞれの処理の解説。
LevelSequenceActorを取得し、SequencePlayerコンポーネントを変数化
仕込んだTagからシーケンサー内のカメラを取得
このときViewTargetをこのカメラに切り替えておく。後述のキャラクター操作と紐づけたいため。
ObjectTagから、ThirdPersonCharacterのトラックにPlayerCharacterをバインドする
SetBindingByTagでも可。挙動の違いは調べられていない。
シーケンサー終了時に発火するイベントをバインドする。
①:SequencerPlayerからピンを伸ばしBind Event On Finishedノードを作成
②:カスタムイベントを作成しバインドをつなぐ。SetViewTargetWithBlendでカメラをPlayerCharacterに戻すが、このときOnFinished直後だとシーケンサーとカメラを奪い合う挙動になってしまうらしいので、DelayUntilNextTickで1フレームだけ待機しておく。
シーケンサーをPlayする
この時点で、
- プレイインするとシーケンサーが動き、
- ThirdPersonCharacterにはPlayerCharacterがバインドされており、
- ThirdPersonCharacterのSectionRangeに到達した場合プレイヤーが操作可能になり、
- シーケンサー終了後デフォルトのカメラに戻る
はずなので、それを確認する。
以降、PlayerCharacterへのインプットが気持ち悪いので、そのブラッシュアップを行う。
BP_ThirdPersonCharacter
Movement Inputのノードの一部を書き換える。
①:シーケンサー制御中にインプット入力をすると微動するのが不格好なのでBool変数で分岐し制御する。後述のシーケンサーBPでこれをTrueに書き換える。
②:シーケンサーカメラのときはGetControlRotationでは正しいカメラ画角が得られないため、この部分をGetPlayerViewPointに差し替える。
シーケンサーBP
シーケンサーにてイベントトラックを追加する
Triggerで
ThirdPersonCharacterのトラックに打たれたキーフレームの終了タイミングに合わせてイベントトラックのキーを打つ。
キーを右クリック。プロパティからCreateNewEndPoint
シーケンサーBPの画面になるので、GetPlayerCharacterからThirdPersonCharacterをキャストしMovementInputを止めていたBool変数を書き換える。
おまけ
シーケンサー再生中にもその裏でマウスによるFollowCameraが動作しているのでそれを制御する
シーケンサー終了時にあらぬ方向へカメラが戻ってしまうことがあるので、それを防ぐ。
BP_ThirdPersonCharacterのCameraInputにBool変数による分岐を追加
レベルBPにて、最後の処理に追記
DelayのDurationはViewTargetのBlendTimeと一致させる。
プロジェクト配布
サンプルデータはこちらです。
Discussion