まずは今回作った動画から。ボス登場演出的なやつ。
インゲームのカメラとブレンドする
カット開始/終了のフレーム区間でカメラをブレンドする機能。
カメラカットでメニューを開き ブレンド可能
にチェックを入れると、カットの前後でブレンド区間が設定可能になります。
カット端の左上&右上でドラッグする(実際かなり押しづらいがw)。
複数のカメラカット間でもブレンドできます。詳しくはヒストリアさんの記事でどうぞ。
やったこれだけでブレンドできたぞ!!すごい!!!
インゲームで再生したときにレターボックスが表示される
ブレンド区間で左右が黒く塗りつぶされる場合があります。
CineCameraActor
の ConstrainAspectRatio
がデフォルトで ON になっているため。明示的に OFF にしましょう。
ゲーム内のアクターで置換する
レベルシーケンス内のアクターを、ゲーム側でスポーンしたアクターに置き換える機能。
まずはシーケンサ内にキャラクターを追加します。
コンテンツブラウザから、シーケンサのウィンドウにドラッグするだけで OK。
SkeletalMesh ではなくゲームでスポーンする BP を配置する。
回転軸の変換や、コリジョンによる接地などがそのまま反映されるため。
Possessable ではなく Spawnable の状態にする必要があります。アイコンに雷マークついてるやつ。
置換するアクターにタグをつける
バインドするアクター毎にタグを追加する。
ここで入力した名前が、BP での指定に使われます。分かりやすい名前をつけてあげましょう。
Blueprint でバインドを指定する
LevelSequenceActor
に対して AddBindingByTag
でアクターをバインドする。これでシーケンサ内で操作していたアクターはスポーンされなくなり、ゲームのアクターにトラックが反映されるようになる。Boss アクターは予め適当な場所にスポーンさせておく。
しかしこのままでは、シーケンサが終了すると同時にアクターは元の状態に戻されてしまいます。トランスフォームトラックの項で後述。
アニメーショントラックの設定
シーケンサで再生するアニメーションを アニメーショントラック
に追加します。
BP 内に複数の SkeletalMesh が存在する場合は、追加するトラック一覧に アニメーショントラック
が表示されません。
CharacterMesh0 など、メッシュのトラックを追加した上で、改めてアニメトラックを追加する必要があります。
AnimMontage
は未対応、AnimSequence
or AnimComposite
のみ指定することができます。
アニメトラック内でブレンドやアニメ尺を調整することも可能。
ていうかこの機能 AnimComposite にも欲しい。。
RootMotion を利用したい
RootMotion の移動値を反映させたい場合。以下の方法があるようです。
Sequencer Non-Linear Animation (NLA) Tools (Beta)
しかしアクターを置換する場合など、SkeletalMeshComponent
の AnimationMode
が UseAnimBlueprint
になっている場合はルートが動いてくれない。
ForceCustomMode
にチェックを入れれば動くのだが、実際に更新されるのはメッシュ本体だけで、アクター自体はその場で停止する。SwapRootBone
を指定しても座標軸がズレたり、期待した動作にはならなかった。
アニメーションルートからインポート
トランスフォームトラックは AnimSequence から RootMotion をインポートすることができるらしい。しかしやはりメッシュ本体の座標軸で動作するなど、期待した動作には(ry。結構古い機能で今後廃止になっていく感じがする。
この辺は沼ってるので詳しい人教えてください。今のところはトランスフォームをそれっぽく打ち込むことにしてます。。
トランスフォームトラックの設定
バインドしたアクターのトランスフォーム(&アニメ、その他)は、シーケンサの停止とともに元の状態に戻されてしまう。
トラックから セクションの編集
、WhenFinished
を KeepState
に変更することで、状態が維持されるようになる。シーケンサの最後の状態をゲームに引き継いでくれます。
途中からトランスフォームを反映させたい
シーケンサの途中で指定位置にテレポートするなど。サンプル動画の後半プレイヤー位置を参照。
キーを打つと左右にトラックが伸びた状態で保存されます。このときキーの前後、全てのフレームで左右端の値が反映されます。つまりプレイヤーは最初のフレームから指定位置にテレポートすることになる。
トラックメニューから 編集
セクションの左側をトリム
を実行すると、左側のトラック区間を切断し、値の反映を無効化することができます。
その他やっておくとよさそうな設定
ブレンド終了時のカメラ位置はリセットしておく
イベントトラックなどからカメラの位置をリセットする。してない場合は再生前のカメラ状態のままブレンドされる。
MovementMode を Flyng に変更する
分かりづらいですが、今回の動画では敵キャラが一部で浮遊しています。シーケンサエディタ再生上では問題ありませんが、ゲーム内では Pawn の挙動そのままで接地してしまい、望んだカットにならないことも。
シーケンサ再生時は AI を止める
停止しないと、アニメ再生が同時にブレンドされてキモい感じに。
void AMyAIController::SetLogicPaused( bPause )
{
if ( UBrainComponent* BrainComp = GetBrainComponent() )
{
FString Reason( TEXT( "from SetLogicPaused" ) );
if ( BrainComp->IsRunning() )
{
if ( bPause )
{
BrainComp->PauseLogic( Reason );
}
}
else
{
if ( !bPause )
{
BrainComp->ResumeLogic( Reason );
}
}
BrainComp->RestartLogic();
}
}
やり方は色々あるだろうけど、AI の一時停止。PauseLogic
などは BP 公開されてないらしい。。