二人プレイゲームをつくっているのですが、二画面出力がしたいです。

二人プレイの対戦アクションゲームを作っています。
そこで、モニター二台にそれぞれのプレイ画面を出力したいのですが、やり方がよく分かりません。

1Pのプレイ画面をモニター1に。
2Pのプレイ画面をモニター2に出力

という風にしたいのですが、どのようにすればいいでしょうか。
また、画面を二つともフルスクリーンで出力する際の方法も教えていただけると幸いです。

ユースケースとしてはよくわかりませんが、UE4のデフォルトの機能で実現することは出来なかったと思います。

提案できる対応としては以下のものがあります

  • SplitしたWindowを複数モニターに引き伸ばして使う
  • プラグインを使う(or エンジンを改造する)
  • PCを2台用いてネットワークマルチプレイヤーゲームとして切り離す

一番お手軽なのは1番目でしょう
ただし、 フルスクリーン という要件を満たすことは出来ませんので、おそらく却下になるかと思います


2番目の選択肢が正攻法になります。
プラグインとしては、下記のものがあります
ExtraWindowCam Unreal Engine 4 Plugin

このプラグインはおそらくすべての要件を満たしてくれるでしょう。
ただし、このプラグインはUE4.19で動作しますが、導入時に多少の改修が必要になる上、レンダリング周りで微妙に問題が発生するようですので、必要に応じて修正する技量が必要となります

以下、参考資料です

Does UE4 support multiple monitors?
複数のモニタに別々の画面を出力する方法
How can I create a multiple-camera/multiple-monitor Setup?


3番目は、ハードウェア要件が変わってしまいますが、標準機能のみで「マルチプレイヤー」「プレイヤーごとに別のモニターに出力」という要件を満たすという意味では検討可能な内容かと思います。

以下、参考資料です

Multiplayer Shootout

教えていただきありがとうございます。

二番目の方法を試そうと思い、プラグインを導入しようとしたのですが導入できません。
ソースコードを少し弄ってみたりもしたのですが、上手くいきません。
よろしければ導入時の改修について教えていただけますでしょうか。

ひとまず導入可能なレベルの改修を提示します
なお、修正後にビルドする必要があるため、プラグインの修正はC++プロジェクトで行います

ExtraCamWindow.Build.cs を修正します

using UnrealBuildTool;

public class ExtraCamWindow : ModuleRules
{
	// public ExtraCamWindow(TargetInfo Target)
        // ↓
        public ExtraCamWindow(ReadOnlyTargetRules Target) : base(Target)
	{
        // Insert this ↓
        PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
        PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Slate", "SlateCore", "UMG" });

        // --

次に、 ExtraCamWindowActor.h に、 Engine.h への参照を追加します

#pragma once

// add "Engine.h"
#include "Engine.h"
#include "ExtraCamWindowActor.generated.h"

ExtraCamWindowActor.cpp の20行目〜を以下のように修正します

	if (World)
	{
		for (FConstPlayerControllerIterator Iterator = World->GetPlayerControllerIterator(); Iterator; ++Iterator)
		{
			// APlayerController* PlayerController = *Iterator;
                    TWeakObjectPtr<APlayerController> PlayerController = *Iterator;
			// if (PlayerController && PlayerController->PlayerCameraManager)
                    if (PlayerController.IsValid() && PlayerController->PlayerCameraManager)
				CamManager = PlayerController->PlayerCameraManager;
			
		}
	}

ExtraCamWindowActor.cpp の57行目〜を以下のように修正します

	ViewportOverlayWidget = SNew(SOverlay);

	TSharedRef<SGameLayerManager> LayerManagerRef = SNew(SGameLayerManager)
	.SceneViewport(GEngine->GameViewport->GetGameViewport())
	.Visibility(EVisibility::Visible)
    // ↓ Disable this
	// .UseScissor(false)
	.Cursor(CursorInWindow)
	[
		ViewportOverlayWidget.ToSharedRef()
	];

以上の改修でひとまず動作すると思います。
他のエラーが出ている場合は適宜修正してください

返信が遅れてしまい申し訳ありません。
丁寧に教えていただきありがとうございます。

教えていただいたとおりにし、UE4のIWYUリファレンスを見ながらソースコードを書き換えたら
無事に導入できました。

本当にありがとうございました。