UE4/5多人游戏详解(一、基础理论与局域网内部的连接)

目录

多人游戏理论简单讲解

点对点:

于是,服务端和客户端的概念出现了:

局域网连接:

从第三人称c++项目开始

创建项目:

以一个客户端作为监听服务器

3个客户端,在场景后方使用服务器:

局域网连接:

蓝图

C++


多人游戏理论简单讲解

点对点:

什么是点对点?

比如两个玩家,其移动和攻击,将数据互相传输,如图:

但一旦多了一个玩家,比如玩家C的出现,这样就会导致大量的数据进行传输:

网络上面的数据大量传输只是一个原因。

更大的原因是3个玩家之间的游戏实例也是时时刻刻发生变化的,那么问题来了,ABC应该要遵循谁的游戏实例呢?

也就是说他们3个谁也无法说服谁,没有人知道谁是真正的权威【作为主要的游戏实例】

于是,服务端和客户端的概念出现了:

通过获取的【假设是移动】,复制给其他客户端,从而刷新。

除此之外,是服务器的机器是专门用来处理数据,而没有进行图片渲染,之后将处理的数据给各个客户端的。

局域网连接:

连接本地的同一个局域网的几个玩家:

从第三人称c++项目开始

创建项目:

进入之后:

以一个客户端作为监听服务器

将玩家数量改为2,然后以监听服务器运行

所以如果将玩家数量改为3,就会看见3代同框:

3个客户端,在场景后方使用服务器:

局域网连接:

蓝图

创建一个地图,作为等待房间:

 

就基础的basic地图,这个地图将是玩家通过连接之后前往的地图

然后我们对第三人称的蓝图进行更改:

第一个的意思是你打开了waitmap,然后作为listen监听服务端【就是说你即是服务端又是客户端】

第二个的意思是你通过控制台进入第一个的ip地址的关卡。【Open+空格+你的ip地址

假如你拥有两个电脑【真的有将游戏打包给另一台电脑即可】,那么,作为服务器的电脑按下1,进入等待房间,客户端的电脑这个时候按下2即可进入1所在的等待房间。

这里两者就可以在一起行动了。

Ip地址的查看

查看自己的ip地址,打开cmd,然后输入ipconfig

然后在这里看你的ip地址:

 

C++

首先我们制作函数,如果不知道怎么做的看这个:

ue4/5蓝图与c++混用基础入门的基础操作(适合有蓝图基础和c++基础的新手,创建自己的蓝图)_ue4蓝图和c++混合开发_多方通行8的博客-CSDN博客

然后在角色的头文件里面:

添加这几个函数:

代码:

//打开等待关卡
	UFUNCTION(BlueprintCallable)
	void openWaitMap();
	
	//进入等待关卡
	UFUNCTION(BlueprintCallable)
	void intoWaitMap(const FString& Address);


	UFUNCTION(BlueprintCallable)
	void CallClientToMap(const FString& Address);

之后在cpp中实现:

代码:

void AMorePersonTestCharacter::openWaitMap()
{
	//创建并获取世界
	UWorld* world = GetWorld();
	//判断世界是否有效
	if (world)
	{
		//打开等待关卡,变成监听
		world->ServerTravel("/Game/Map/WaitMap?listen");
	}
}

void AMorePersonTestCharacter::intoWaitMap(const FString& Address)
{
	//需要这个#include "Kismet/GameplayStatics.h"头文件
	//这里的*Address是c风格字符串
	UGameplayStatics::OpenLevel(this, *Address);
}

void AMorePersonTestCharacter::CallClientToMap(const FString& Address)
{
	//创建控制器并找到赋予
	APlayerController* playerControlRef= GetGameInstance()->GetFirstLocalPlayerController();
	//判断是否有效
	if (playerControlRef)
	{
		playerControlRef->ClientTravel(Address,ETravelType::TRAVEL_Absolute);
	}
}

 之后来到蓝图中调用就是:

这里的地址只需要输入ip即可。

猜你喜欢

转载自blog.csdn.net/q244645787/article/details/130081614