UE4自身提供了分屏显示的方法,可以分成两个屏幕,也可以分成三个屏幕,但提供的分屏布局方式有限,包括两个玩家分屏布局--Vertical/Horizontal,三个玩家分屏布局--Favor Top/Favor Bottom,这里提供给大家一种修改底层代码,增加布局方式的方法,以增加三联屏并排显示的布局方式为例:

UE4修改splitScreen layout方式

      分屏布局需要修改的相关代码文件为:Source\Runtime\Engine\Classes\Engine\GameViewportClient.h

Source\Runtime\EngineSettings\Classes\GameMapsSettings.h

Source\Runtime\Engine\Classes\Engine\ViewportSplitScreen.h

Source\Runtime\Engine\Private\GameViewportClient.cpp

     分屏类型的枚举变量在ViewportSplitScreen.h中定义,为ESplitScreenType,在该枚举变量中添加ThreePlayer_Vertical类型,分屏类型的数组在GameViewportClient.h中定义,如下所示:

UE4修改splitScreen layout方式

 

SplitsScreenInfo的初始值在UGameViewportClient构造函数中设定:

UE4修改splitScreen layout方式

选中分屏方式后的布局由FPerPlayerSplitscreenData中的参数决定,FPerPlayerSplitscreenData的结构如下:

UE4修改splitScreen layout方式

      分屏的选项在Project Setting里设定,如下所示:

UE4修改splitScreen layout方式

   界面的comboBox中对应的类型在GameMapsSettings.h中定义,分别为ETwoPlayerSplitScreenType、EThreePlayerSplitScreenType,因此每次切换分屏方式操作时,需要对应更新ActiveSplitscreenType,更新逻辑在UpdateActiveSplitscreenType中实现。另外需要更新所有本地玩家所在视口的左上角坐标和窗口大小,更新逻辑在LayoutPlayers中实现。

UE4修改splitScreen layout方式

       更新分屏对象之后,在GameViewportClient.cpp还有一段针对死区的计算,函数为CalculateDeadZoneForAllSides,该函数没有查找到被调用的地方,但是函数内也有针对于玩家和分屏类型相关的处理,我也对该段进行了修改,主要是计算本地玩家所在的死区的像素大小,和安全区域的计算。

相关文章:

  • 2023-01-17
  • 2021-10-26
  • 2021-11-16
  • 2022-12-23
  • 2021-09-04
  • 2021-08-21
  • 2022-02-09
猜你喜欢
  • 2021-12-02
  • 2021-07-27
  • 2021-12-24
  • 2022-12-23
  • 2021-07-27
  • 2021-12-31
相关资源
相似解决方案