MultiPlayerShoot----C++学习记录03Seamless Travel

进入地图的2种方式:非无缝式连接和无缝式连接

非无缝式旅行

所有客户端会从服务器断开然后重新连接。

出现非无缝移动:1、 首次加载地图时。2、首次连接服务器时。3、 结束多人游戏并开始新游戏时

MultiPlayerShoot----C++学习记录03Seamless Travel_第1张图片

无缝式旅行

带来流畅的网络体验、避免任何重新连接问题。打开无缝旅行,只需要一行代码;需要一个中间的转移地图

MultiPlayerShoot----C++学习记录03Seamless Travel_第2张图片

MultiPlayerShoot----C++学习记录03Seamless Travel_第3张图片

新建一个c++类,GameModel,作为大厅的GameModel

头文件

#include "CoreMinimal.h"
#include "GameFramework/GameMode.h"
#include "LobbyGameMode.generated.h"

/**
 *  大厅游戏模式类
 */
UCLASS()
class SHOOTER_API ALobbyGameMode : public AGameMode
{
	GENERATED_BODY()

public:
	// 重写玩家登入函数,当新玩家连接到大厅时调用
	virtual void PostLogin(APlayerController* NewPlayer) override;
};

编写CPP

#include "LobbyGameMode.h"
#include "GameFramework/GameStateBase.h"

void ALobbyGameMode::PostLogin(APlayerController* NewPlayer)
{     //保留父类该函数原来的功能
	Super::PostLogin(NewPlayer);

	//获取玩家数量,将T指针变成一个普通指针
	int32 NumberofPlayers = GameState.Get()->PlayerArray.Num();

	if(NumberofPlayers == 2)
	{
		UWorld* World = GetWorld();
		if (World)
		{	// 设置允许无缝切换,并切换到指定地图
			bUseSeamlessTravel = true;
			World->ServerTravel(FString("/Game/Maps/FightMap?listen"));
		}
	}
}

新建一个蓝图继承这个大厅Gamemodel,将默认的pawn修改为我们的角色,这样可以使用角色在大厅里跑动,然后将Lobby地图的GameModel修改为该蓝图

MultiPlayerShoot----C++学习记录03Seamless Travel_第4张图片MultiPlayerShoot----C++学习记录03Seamless Travel_第5张图片

新建一个空白地图作为角色转移时的过度地图,因此啥都不需要。在设置中将它设置为转移地图

MultiPlayerShoot----C++学习记录03Seamless Travel_第6张图片

 新建一个战斗地图,和蓝图(基于Gamemodel),将蓝图里的将默认的pawn修改为我们的角色,同时将战斗地图的游戏模式修改为该蓝图

更改初始视角和玩家出身点

对于一开始的启动界面,插入玩家出生点,蓝色箭头为方向。对于大厅和战斗地图可以加个玩家出生点来限制

MultiPlayerShoot----C++学习记录03Seamless Travel_第7张图片MultiPlayerShoot----C++学习记录03Seamless Travel_第8张图片

 

你可能感兴趣的:(UE5,学习,1024程序员节,ue5)