カメラ移動にキャラクターが遅延追従する
キャラクターに対してカメラが遅延して追従する方法は
あスピード感を出すため、様々なゲームで用いられています。
カメラ移動に対してキャラクターが遅延して追従する方法は、
キャラクターの巨大さ・重さを表す際に使用されます。
有名ゲームで言うとMechWarriorなどで採用されています。
前置きはほどほどに、とりあえず作ってみました。
Third Person テンプレートを使用しており、UE4.25.4で実行しています。
ThirdPersonCharacterのブループリントに追加する形にしています。
Get Control Rotationで取得できる方向に、アクターを遅延させて追従させるの実装に無駄に時間かかった。
— かまぼこ (@sasakamaya) 2020年12月6日
すごく簡単なのにorz pic.twitter.com/3hBlAtyeCn
マウスを速く左右に回した際において、
キャラクターが設定した旋回速度に応じて追従しています。
まず、この箇所でアクタの正面ベクトルと
コントローラ(ビュー)の正面ベクトルの外積を計算しています。
外積は2つのベクトルと垂直なベクトルとなります。
この時、回転方向によってベクトルの正負が決定されるため
回転方向別に考えなくていいです。
Z軸の回転のみなのは、簡単化のためです。
外積で出したベクトルを回転軸として RotateVectorAroundAxis によって回転させます。
この時の引数で回転速度を決定しています。
Base Turn Rate はThird Person テンプレートに元々入っている変数となります。
あとはGetWorldDeltaSecondsで1フレーム当たりの時間を取得し、
1フレームあたりの回転にしています。
確認はまだなのですが単位は Dec/frame だと思われます