[UE4][C++]调整分屏模式下(本地多玩家)视口的显示位置和区域

这篇具有很好参考价值的文章主要介绍了[UE4][C++]调整分屏模式下(本地多玩家)视口的显示位置和区域。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、分屏模式设置

          在UE4中,多个玩家共用一个显示器就可以启用分屏模式,按玩家人数(最大四人)将屏幕均匀分割,显示不同玩家的视角,开发者可以在编辑器里设置分割类型(水平或者垂直),这个分割是采用UV坐标的方式。

(进入项目设置--项目--地图和模式--本地多人)
[UE4][C++]调整分屏模式下(本地多玩家)视口的显示位置和区域,ue4

调整Player的摄像机的宽高比,可以调整显示画面的大小比例
[UE4][C++]调整分屏模式下(本地多玩家)视口的显示位置和区域,ue4

二、分屏位置构造

分屏源代码位于:\Runtime\Engine\Private\GameViewportClient.cpp 

        其位置位于构造函数中  (部分源码截图),它定义了从1个玩家到4个玩家的的屏幕排列顺序和区域。

[UE4][C++]调整分屏模式下(本地多玩家)视口的显示位置和区域,ue4

分屏方式定义如下

/**
 * Enum of the different splitscreen types
 */
namespace ESplitScreenType
{
	enum Type
	{
		// No split
		None,
		// 2 player horizontal split
		TwoPlayer_Horizontal,
		// 2 player vertical split
		TwoPlayer_Vertical,
		// 3 Player split with 1 player on top and 2 on bottom
		ThreePlayer_FavorTop,
		// 3 Player split with 1 player on bottom and 2 on top
		ThreePlayer_FavorBottom,
		//3 Player vertical split
		ThreePlayer_Vertical,
		//3 Player horizontal split
		ThreePlayer_Horizontal,
		// 4 Player grid split
		FourPlayer_Grid,
		// 4 Player vertical split
		FourPlayer_Vertical,
		// 4 Player horizontal split
		FourPlayer_Horizontal,

		SplitTypeCount
	};

	// Deprecated old FourPlayer grid enum value
	UE_DEPRECATED(4.21, "FourPlayer is now FourPlayer_Grid")
	const Type FourPlayer = FourPlayer_Grid;
}

 屏幕排列位置和区域定义如下


/** Structure to store splitscreen data. */
struct FPerPlayerSplitscreenData
{
	float SizeX;
	float SizeY;
	float OriginX;
	float OriginY;


	FPerPlayerSplitscreenData()
		: SizeX(0)
		, SizeY(0)
		, OriginX(0)
		, OriginY(0)
	{
	}

	FPerPlayerSplitscreenData(float NewSizeX, float NewSizeY, float NewOriginX, float NewOriginY)
		: SizeX(NewSizeX)
		, SizeY(NewSizeY)
		, OriginX(NewOriginX)
		, OriginY(NewOriginY)
	{
	}

};

 因此只要我们去修改结构体里的数据就可以做到调节位置和区域

三、分屏位置调节

为了能在蓝图里动态修改我同样也构建了相同的结构体

USTRUCT(BlueprintType)
struct FSplitData
{
	GENERATED_USTRUCT_BODY()

	UPROPERTY(EditAnywhere)
		float SizeX;
	UPROPERTY(EditAnywhere)
		float SizeY;
	UPROPERTY(EditAnywhere)
		float OriginX;
	UPROPERTY(EditAnywhere)
		float OriginY;
	
	FSplitData()
	{
		SizeX = 0;
		SizeY = 0;
		OriginX = 0;
		OriginY = 0;
	}

	FSplitData(float x,float y,float sizex,float sizey):
		OriginX(x),
		OriginY(y),
		SizeX(sizex),
		SizeY(sizey)
	{

	}
};

我在gamemode里创建代码,在地图蓝图中去调用代码就可以改变分屏位置文章来源地址https://www.toymoban.com/news/detail-617371.html

void ABloodGameModeBase::SplitScreen(TArray<FSplitData> DataArray)
{
	//4个player
	if (GEngine && GEngine->GameViewport)
	{
		if (DataArray.Num() == 4)
		{
			for (int i = 0; i < 4; i++)
			{
				GEngine->GameViewport->SplitscreenInfo[ESplitScreenType::FourPlayer_Vertical].PlayerData[i].OriginX = DataArray[i].OriginX;
				GEngine->GameViewport->SplitscreenInfo[ESplitScreenType::FourPlayer_Vertical].PlayerData[i].OriginY = DataArray[i].OriginY;
				GEngine->GameViewport->SplitscreenInfo[ESplitScreenType::FourPlayer_Vertical].PlayerData[i].SizeX = DataArray[i].SizeX;
				GEngine->GameViewport->SplitscreenInfo[ESplitScreenType::FourPlayer_Vertical].PlayerData[i].SizeY = DataArray[i].SizeY;
			}
		}
		//log
		GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("SplitScreen"));
	}
}

到了这里,关于[UE4][C++]调整分屏模式下(本地多玩家)视口的显示位置和区域的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE4 限制玩家摄像机视角旋转角度

    功能 :玩家可以用鼠标旋转视角观察角色,但限制旋转的角度 网上找了很多没找到,于是自己实现了一种方式 先在弹簧臂组件里勾上使用pawn控制旋转,这样相机的旋转就跟玩家控制器绑定了,所以重点在于如何对玩家控制器进行限制 如果不加旋转限制的话是这样子 可以发

    2024年02月12日
    浏览(49)
  • UE4样条线移动,玩家只需要控制旋转

    1.创建Actor并命名为“A_Spline” 2.创建Pawn并命名为“P1” 3以上创建的蓝图类可以使用自己的命名!!!!! 第二步:给P1写上蓝图 1.我们首先给P1写蓝图 2.在输入映射中设置一个事件Yaw 3.为鼠标的X轴,数值为1 4.如图写上刚刚设置的输入事件 第三步:给A_Spline写上蓝图 1.添加一

    2023年04月09日
    浏览(57)
  • 【UE4 塔防游戏系列】08-敌人到达终点对玩家造成伤害

    目录 效果 步骤 一、敌人到终点时扣除玩家生命值 二、显示玩家生命值 可以看到敌人进入终点后,左上角的玩家生命值会减少。  一、敌人到终点时扣除玩家生命值 新建一个Actor蓝图类,命名为“BP_EnemyEndPlace”,用来表示终点 打开“BP_EnemyEndPlace”添加一个盒体碰撞组件,

    2024年02月17日
    浏览(62)
  • UE4 中可全局获取的变量(例如游戏实例、玩家控制器等) 详解

    🙋‍♂️ 作者:海码007 📜 专栏:UE虚幻引擎专栏 💥 标题:UE4 中可全局获取的变量(例如游戏实例、玩家控制器、游戏模式等) 详解 ❣️ 寄语:加油,一次专注一件事! 🎈 最后: 文章作者技术和水平有限,如果文中出现错误,希望大家能指正,同时有问题的话,欢迎

    2024年02月06日
    浏览(101)
  • 在UE4虚幻引擎中加入导航网格体边界体积后丧尸不能移动和发现玩家

    最近使用ue4做第一人称视角射击游戏发现问题,加入导航网格体边界体积后丧尸不能移动和发现玩家。下图是出现的问题图片 1.行为树:控制并显示AI的决策制定过程 2.黑板:可以看做是行为树的创建一些公有变量,外部可以修改行为树黑板的变量值,达到修改行为树状态的

    2024年02月05日
    浏览(103)
  • UE4/5对背景音乐的调整设置

    音乐是一个游戏必不可少的因素。 而在游戏设置中,必不可少的就有对背景音乐的声音大小进行设置,而我们需要的就是如何对背景音乐进行设置: 准备两个蓝图,分别是 音效类 和 音效类混合 。 然后打开 音效类 ,我们可以看见下图的样子,新创建一个 混合修改器 ,将

    2024年02月09日
    浏览(42)
  • UE4 材质学习 (02-利用UV来调整纹理)

    步骤: 1.在内容浏览器中新建一个材质 命名为uvTest    2.双击打开uvTest 随便将一个纹理(一种.tga格式的图片)拖入材质面板中:  3.创建如下节点并连接  4.选中 TextureCoordinate 节点,在细节面板中可以通过U平铺和V平铺两个参数来调整纹理的疏密。 比如,我将 U平铺和V平铺

    2024年02月12日
    浏览(46)
  • UE4、5 清理缓存以及修改缓存位置

    UE项目第一次加载都会产生缓存,因此第一次加载都会很慢,第二次就会很快,但是缓存的位置默认在C盘,所以会发现C盘空间越来越少,所以我们需要更改默认缓存位置到当前项目位置 首先,找到 C:UsersadminAppDataLocalUnrealEngineCommon 这个目录,删除DerivedDataCache文件夹,如

    2024年02月11日
    浏览(45)
  • 【UE4 制作自己的载具】4-常用的载具参数的调整

    打开“Vehicle_BP”,首先介绍三个常用的参数设置 选中“VehicleMovement(继承)”,可以在引擎设置中调节发动机的最大转速 载具的抓地系数(一般设置大一点,载具在高速行驶时不容易打滑) 停止阈值,当前进键松开时,载具滑行速度低于某个值时,载具自动制动 汽车的悬

    2024年02月07日
    浏览(80)
  • UE4 绕一个物体或位置进行围绕旋转

    首先在预构造内获取旋转半径,模型设置,以及模型大小 再去事件刚开始时进行获取上一次位置(用于计算切线方向),并判断是否有选中需要旋转的物体,如果有,就把他的位置设置给旋转中心位置,如果没有,Center Rotate Position也时暴露在外部进行填写的  利用旋转矩阵(Z轴

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包