您现在的位置是:首页 >技术教程 >UE4/5多人游戏详解(一、基础理论与局域网内部的连接)网站首页技术教程
UE4/5多人游戏详解(一、基础理论与局域网内部的连接)
目录
多人游戏理论简单讲解
点对点:
什么是点对点?
比如两个玩家,其移动和攻击,将数据互相传输,如图:
但一旦多了一个玩家,比如玩家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即可。