UE5——网络——几种网络模式

cpp 复制代码
/**
 * The network mode the game is currently running.
 * @see https://docs.unrealengine.com/latest/INT/Gameplay/Networking/Overview/
 */
enum ENetMode
{
	/** Standalone: a game without networking, with one or more local players. Still considered a server because it has all server functionality. */
	NM_Standalone,

	/** Dedicated server: server with no local players. */
	NM_DedicatedServer,

	/** Listen server: a server that also has a local player who is hosting the game, available to other players on the network. */
	NM_ListenServer,

	/**
	 * Network client: client connected to a remote server.
	 * Note that every mode less than this value is a kind of server, so checking NetMode < NM_Client is always some variety of server.
	 */
	NM_Client,

	NM_MAX,
};

NM_Standalone:单机游戏:一个没有网络的游戏,有一个或多个本地玩家。仍然被视为服务器,因为它具有所有服务器功能。

NM_DedicatedServer:专用服务器:没有本地玩家的服务器。只作为服务器部分,接受其他客户端的连接。

NM_ListenServer:侦听服务器:也有一个本地玩家主持游戏的服务器,可供网络上的其他玩家使用。自己作为客户端,同时也是服务器,可以接受其他客户端的连接。

NM_Client:网络客户端:连接到远程服务器的客户端。请注意,每个小于此值的模式都是一种服务器,因此检查NetMode<NM_Client总是某种服务器。已经联网的客户端,连接了其他DedicatedServer 或者 ListenServer

cpp 复制代码
/** The network role of an actor on a local/remote network context */
UENUM()
enum ENetRole
{
	/** No role at all. */
	ROLE_None,
	/** Locally simulated proxy of this actor. */
	ROLE_SimulatedProxy,
	/** Locally autonomous proxy of this actor. */
	ROLE_AutonomousProxy,
	/** Authoritative control over the actor. */
	ROLE_Authority,
	ROLE_MAX,
};

ROLE_SimulatedProxy:此参与者的本地模拟代理,模拟的NetRole,指的是已经连接DedicateServer或者ListenServer的客户端上面的,游戏玩家或者怪物。这些角色在本客户端,只有被模拟的权限。

ROLE_AutonomousProxy:此参与者的本地自治代理。有自治权的角色,指的是已经连接DedicateServer或者ListenServer的客户端上面的主角。自己是有操作和预表现(客户端先行)权限的,但是需要经过服务器的校验和纠错。

ROLE_Authority:对行动者的权威控制,有自治权的角色,指的是已经连接DedicateServer或者ListenServer的客户端上面的主角。自己是有操作和预表现(客户端先行)权限的,但是需要经过服务器的校验和纠错。

GetLocalRole()返回本地计算机对此参与者的控制程度

1.Play Standalone

2.Play As Listen Server


3.Play As Client


GetRemoteRole()返回远程计算机对此参与者的控制程度

1.Play Standalone


2.Play As Listen Server


3.Play As Client

代码部分

cpp 复制代码
oid UMainWidget::SetDisplayText(FString TextToDisplay)
{
	if (DisplayText)
	{
		DisplayText->SetText(FText::FromString(TextToDisplay));
	}
}

void UMainWidget::ShowPlayerNetRole(APawn* InPawn)
{
	//ENetRole RemoteRole = InPawn->GetLocalRole();
	ENetRole RemoteRole = InPawn->GetRemoteRole();
	
	FString Role;
	switch (RemoteRole)
	{
	case ENetRole::ROLE_Authority:
		Role = FString("Authority");
		break;
	case ENetRole::ROLE_AutonomousProxy:
		Role = FString("Autonomous Proxy");
		break;
	case ENetRole::ROLE_SimulatedProxy:
		Role = FString("Simulated Proxy");
		break;
	case ENetRole::ROLE_None:
		Role = FString("None");
		break;
	}
	FString RemoteRoleString = FString::Printf(TEXT("Role: %s"), *Role);
	SetDisplayText(RemoteRoleString);
}
相关推荐
爱吃涮毛肚的肥肥(暂时吃不了版)3 分钟前
计算机网络34——Windows内存管理
网络·计算机网络·udp
axin7c88 分钟前
UnLua访问C++属性、动态生成Actor
ue5
axin7c815 分钟前
UnLua扩展C++函数和蓝图自定义事件
ue5
为祖国添砖爪哇21 分钟前
【Git原理与使用】多人协作与开发模型(2)
git
memories19840 分钟前
git使用方法详解(适合新手)
git
码哝小鱼1 小时前
firewalld封禁IP或IP段
linux·网络
为祖国添砖爪哇1 小时前
【Git原理与使用】版本管理与分支管理(1)
git
sec0nd_1 小时前
1网络安全的基本概念
网络·安全·web安全
青柠视频云2 小时前
青柠视频云——视频丢包(卡顿、花屏、绿屏)排查
服务器·网络·音视频
网安CILLE2 小时前
2024年某大厂HW蓝队面试题分享
网络·安全·web安全