fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

PREV | PAGE-SELECT | NEXT

≫ EDIT

UE5/UE4 C++でポーズ中もカメラの描画が更新されるようにする(APlayerController::UpdateCameraManager、Tick Even when Paused)

C++でポーズ中もカメラの描画が更新されるようにする方法です。

こちらを参考にさせていただきました。

・【UE5】ポーズ中にカメラを動作させる
https://shuntaendo.hatenablog.com/entry/2022/04/19/211527

「Tick Even when Paused」にチェックを入れてポーズ中も動作するようにしても描画更新されない!
と、ここすごい悩んでいたところだったのでこの記事はすごい助かりました。

というわけで実際にどうしたらいいのかやってみました。

下記の説明を見ると、ポーズ中の描画更新の方法は二種類あるようなのですが、

カメラ自体の更新は LevelTick.cpp の “PlayerController->UpdateCameraManager” で更新されているので
ここを動作させる必要があります。

PlayerController の “Class Default” から “Should Perform Full Tick when Paused” を有効にすることで
ポーズ中も UpdateCameraManager にまで処理が通るようになり、カメラが更新されるようになります。
他のアクターなどで UpdateCameraManager を呼ぶことでも可能です。

影響範囲を考えて今回は後者の「他のアクターなどで UpdateCameraManager を呼ぶ」でやってみます。

まずはカメラを継承したクラスを作成します。

#include "CineCameraActor.h"

UCLASS()
class ANewCameraActor : public ACineCameraActor
{

GENERATED_BODY()
public:
virtual void Tick( float DeltaTime ) override;
};

こんな感じで今回は「ACineCameraActor」を継承したクラスにしてみました。

次に、ポーズ時にも描画が更新されるように処理を書いていきます。
#include "Kismet/GameplayStatics.h"

void ANewCameraActor::Tick(float DeltaTime)
{

// ポーズ時
if(this->GetWorld()->IsPaused()){

// カメラの更新
TObjectPtr< APlayerController > aPlayerController = UGameplayStatics::GetPlayerController(this, 0);
aPlayerController->UpdateCameraManager(DeltaTime);

}
}

「Tick」が実行された時に「ポーズ状態であればカメラの更新を行う」といったものになります。

あとはこれが動作するように、このクラスで配置したBPで「Tick Even when Paused」にチェックを入れて
ポーズ中も「Tick」が動作
するようにします。
ポーズ時も更新されるカメラ000

これで一応「ポーズ中にも動作するカメラ」といった望み通りの挙動ができたのですが、

・ポストプロセスなど一部の処理が更新されない(ブラーなど)
・複数こういったものを作成すると多重で「UpdateCameraManager」が呼ばれてしまいそう。

みたいなことがあるので、もう少し別件としてどこかで調べてみたいと思います。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://kagring.blog.fc2.com/tb.php/705-963f87b2

TRACKBACK

PREV | PAGE-SELECT | NEXT