UE4: Camera の GetActorLocation で得られる位置と1フレームの Tick の中のタイミングのメモ
状況例
「サードパーソンテンプレートのようなプロジェクトを作り、プレイヤーキャラクターとカメラのちょうど中間に何かしらアクターを移動させたい。」
実装手順
中間の位置に出したいアクターの Blueprint へ次のように実装する。
おそらく遭遇する問題
カメラの GetActorLocation
が1フレーム程度遅延した位置を返すため、中間に出したいアクターが少しずれた位置へ出てしまい、ブレ感が発生してしまう。
View post on imgur.com
この問題は ACharactor
が基底型 APawn
の APlayerController
型の Controller
メンバーを介して Rotation 等の入力を処理する場合(サードパーソンテンプレートのプレイヤーキャラクターなどでの初期設定状態)に発生する。入力をイベントが受け付けた段階での処理、またはキャラクターや中間に起きたいアクターの Tick
では Controller
には変化量が保持されているだけで、まだ実際の変化は適用されていない。(なぜ、あるいは詳細は APawn::AddControllerPitchInput
, APlayerController::AddPitchInput
, AController::SetControlRotation
とその呼び出し元の実装を探索すると理解が早いかもしれません。 )
無駄な対処法
AddTickPrerequisiteActor
でどうにかしようとする。
どうにもなりません。
解決方法: 中間に起きたいアクターの Tick
でブレずに(遅延せずに)カメラの位置を取得する方法
中間に起きたいアクターの TickGroup
を PostUpdateWork
に変更する。
UE4Editor の標準状態では TickGroup
は非表示状態になっているので、 Actor Tick
の「▽」的なボタンを展開して変更する。
View post on imgur.com
遅延しなくなりました😃