UE4修改splitScreen layout方式
UE4自身提供了分屏显示的方法,可以分成两个屏幕,也可以分成三个屏幕,但提供的分屏布局方式有限,包括两个玩家分屏布局--Vertical/Horizontal,三个玩家分屏布局--Favor Top/Favor Bottom,这里提供给大家一种修改底层代码,增加布局方式的方法,以增加三联屏并排显示的布局方式为例:
分屏布局需要修改的相关代码文件为: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中定义,如下所示:
SplitsScreenInfo的初始值在UGameViewportClient构造函数中设定:
选中分屏方式后的布局由FPerPlayerSplitscreenData中的参数决定,FPerPlayerSplitscreenData的结构如下:
分屏的选项在Project Setting里设定,如下所示:
界面的comboBox中对应的类型在GameMapsSettings.h中定义,分别为ETwoPlayerSplitScreenType、EThreePlayerSplitScreenType,因此每次切换分屏方式操作时,需要对应更新ActiveSplitscreenType,更新逻辑在UpdateActiveSplitscreenType中实现。另外需要更新所有本地玩家所在视口的左上角坐标和窗口大小,更新逻辑在LayoutPlayers中实现。
更新分屏对象之后,在GameViewportClient.cpp还有一段针对死区的计算,函数为CalculateDeadZoneForAllSides,该函数没有查找到被调用的地方,但是函数内也有针对于玩家和分屏类型相关的处理,我也对该段进行了修改,主要是计算本地玩家所在的死区的像素大小,和安全区域的计算。