UE5/UE4 C++でポーズ中もカメラの描画が更新されるようにする(APlayerController::UpdateCameraManager、Tick Even when Paused)
こちらを参考にさせていただきました。
・【UE5】ポーズ中にカメラを動作させる
https://shuntaendo.hatenablog.com/entry/2022/04/19/211527
「Tick Even when Paused」にチェックを入れてポーズ中も動作するようにしても描画更新されない!
と、ここすごい悩んでいたところだったのでこの記事はすごい助かりました。
というわけで実際にどうしたらいいのかやってみました。
下記の説明を見ると、ポーズ中の描画更新の方法は二種類あるようなのですが、
影響範囲を考えて今回は後者の「他のアクターなどで UpdateCameraManager を呼ぶ」でやってみます。カメラ自体の更新は LevelTick.cpp の “PlayerController->UpdateCameraManager” で更新されているので
ここを動作させる必要があります。
PlayerController の “Class Default” から “Should Perform Full Tick when Paused” を有効にすることで
ポーズ中も UpdateCameraManager にまで処理が通るようになり、カメラが更新されるようになります。
他のアクターなどで UpdateCameraManager を呼ぶことでも可能です。
まずはカメラを継承したクラスを作成します。
こんな感じで今回は「ACineCameraActor」を継承したクラスにしてみました。#include "CineCameraActor.h"
UCLASS()
class ANewCameraActor : public ACineCameraActor
{GENERATED_BODY()public:virtual void Tick( float DeltaTime ) override;};
次に、ポーズ時にも描画が更新されるように処理を書いていきます。
#include "Kismet/GameplayStatics.h"「Tick」が実行された時に「ポーズ状態であればカメラの更新を行う」といったものになります。void ANewCameraActor::Tick(float DeltaTime)
{// ポーズ時
if(this->GetWorld()->IsPaused()){
// カメラの更新
TObjectPtr< APlayerController > aPlayerController = UGameplayStatics::GetPlayerController(this, 0);
aPlayerController->UpdateCameraManager(DeltaTime);}}
あとはこれが動作するように、このクラスで配置したBPで「Tick Even when Paused」にチェックを入れて
ポーズ中も「Tick」が動作するようにします。

これで一応「ポーズ中にも動作するカメラ」といった望み通りの挙動ができたのですが、
・ポストプロセスなど一部の処理が更新されない(ブラーなど)
・複数こういったものを作成すると多重で「UpdateCameraManager」が呼ばれてしまいそう。
みたいなことがあるので、もう少し別件としてどこかで調べてみたいと思います。
| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑