[第16回UE4ぷちコン]振り返り:キルカメラ

ここは[第16回UE4ぷちコン]振り返り子頁です。

概要

  • Sniper Eliteのキルカメラを参考

  • 進行管理用Actorを都度生成してカメラとキャラを制御

  • キャラの接触ではなく時刻ベースで演出進行

動機

FPS視点で敵に突っ込んでバラバラにしてもよいが、もう少し迫力が欲しい。第三者視点から攻撃の原因と結果を眺めるようなものがいいだろう。ということで、Sniper Eliteシリーズのキルカメラ的に、攻撃判定が成立した瞬間にカットチェンジして演出を入れることにした。っていうかいつかパクリたかった。

余談だが「キルカメラ」と言うと対戦シューターでやられた後に下手人を一定時間映すカメラを指す場合が多い気がする。一応、公式がSniper Eliteの攻撃命中演出を「キルカメラ」と呼称しているし、英語でもKill Camで通じるようなので本記事ではキルカメラと表記する。

調査

先達が何をやっているか、何をやっていないかを調べる。幸い、ゲームを引っ張り出さなくてもキルカメラ集などがYoutubeで見つかる。

挙動をメモする。

  • レントゲン的な演出は有るが、カメラシェイク等の賑やかしはない。弾丸の性能試験映像みたい

  • 弾をフォーカスしつづける

  • 最初弾フォーカス、そこから命中部位に演出中にパンする

  • 弾と命中部位の中間から始まって命中部位にフォーカス

  • 命中部位を中心にカメラが周回し続ける

  • 弾フォーカスで敵がフレームインするパターンとその逆の両方ある

  • 命中の前後で上記の挙動を組み合わせる

  • Bullet CamなのかKill Camなのかはっきりしろ

実に様々なパターンがあり飽きがこない。すごい。しかし、こちらは銃弾ではなくパンチでやっつける予定なのでアニメ的な演出が必要になるかも…と思った。ポスプロかな…ということで、いつかパクりたかった講演を思い出す

作り方

プレイヤーの設定する「みち」が敵を指定している場合に、そこへ移動が完了した際に以下の流れで処理が進む。

  • プレイヤーが設定した「みち」の向きに沿って、敵の頭部に攻撃が命中する位置を決める

    • 敵をGeometry Collectionに差し替える前にLineTraceで命中位置を確定させておく。Geometry Collectionは初期状態ではLine Traceへの反応(Collision形状)が見た目通りでないので注意。適切に設定する手段は調べきれなかった…

  • 前述の命中位置にキルカメラ管理ActorをSpawn

  • キルカメラ管理Actorが攻撃姿勢のキャラを動かし、命中位置に到達したら破壊Fieldを発生させ破壊演出

キルカメラ管理Actorの構成

  • Actor原点が攻撃命中位置としてSpawnされる

  • プレイヤーPawn自体はMeshを持たないので、演出用として自らMeshを所持

  • カメラの相対距離は固定

  • 破壊を明瞭に見せるためにカメラにPoint Lightを付与

プレイ中はこういう位置にキルカメラ管理ActorがSpawnされる。ここでは斜め上から突っ込んだので、その方向からキャラが飛んでくる。画像右下が実際のキルカメラ視点。

CamRootのYaw角をSpawn時にランダマイズして同じ絵になりにくいようにしている。カメラの位置×突入角度×攻撃Animationぐらいの多様さは出る。はず。

エンディング用のポーズを作った勢いで、初期姿勢ドリル頭突き以外の攻撃姿勢をいくつか増やした。雑にランダムチョイス。この作り方だと全Animation常駐状態になるが気にしない。もっと増えてから考えるよ(その頃には余裕ないフラグ)

プレイヤーMeshの位置と向き計算。Before Secが命中前の飛翔時間になる。負荷的には1ノードにまとめたほうがよいが、わかりやすさの為にScene Componentを挟んで計算している。まず動かす事を優先した。

着弾タイミングの統一や処理のわかりやすさのため、攻撃姿勢はroot位置に衝突点が来るようにしている。つまり、Skeletal Meshの相対位置が(0,0,0)になったら衝突ということになる。

Tickでこんな感じに移動させれば、任意時間後に命中するような絵が作れる。

命中時にカメラシェイクと、Camera Modifierで一瞬だけポストプロセスを付与している。Delayがやたら短いが、この瞬間のGlobal Time Dilationがスローなのに合わせている。

Camera Modifierの中身。色収差をつけているだけ。これだけでも味わいが増す。ありがとうおかず先生!🙏

プレイヤーMeshをカメラに追従させる関数。Tickで呼ばれる。Follow Cam変数はSpawn時にランダムで決める。追従しない映像も結構好きなのでバリエーションとして残した。

反省点

  • 敵に攻撃する角度に応じて攻撃Animationの種類を変えても良かった

    • ヒップアタックは上から限定とか

  • プレイヤーキャラの移動速度と演出時間が固定なせいで、場所によってはプレイヤーが壁の裏から現れて攻撃する

    • っていうか応募動画でそういうカットある。審査員のみんなには内緒だ

    • 演出前にTraceして距離を測り、多少ゆっくり移動しても変でないAnimationを選択するような仕組みが必要

  • まともなAnimationを作る時間がないとはいえ、攻撃姿勢固定はやや退屈か

    • 雑に作った初期姿勢ローリング頭突きが一番人気ある。やはりダイナミックさが肝要

  • Ignore Global Time Diliationを有効にしたTimelineノードを使えば、進行管理がもっと直感的になったかも