ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unreal NetMode&NetRole 解析 _

2022-11-06 13:10:10  阅读:178  来源: 互联网

标签:网站 系统 解析 美元 DNS 模板 服务器 配置


问题

  • 为啥UE编辑器会有EPlayNetMode有三种让你选择。
  • 为啥描述World 的ENetMode 会有4种,而不只是(Client/Server 2种)。
  • 为何Actor 会有Role的概念。

EPlayNetMode

UENUM()
enum EPlayNetMode
{
	/** A non-networked game will be started. This can be used in combination with bLaunchSeparateServer to test menu -> server flow in your game. */
	PIE_Standalone UMETA(DisplayName="Play Offline"),
	/** The editor will act as both a Server and a Client. Additional instances may be opened beyond that depending on the number of clients. */
	PIE_ListenServer UMETA(DisplayName="Play As Listen Server"),
	/** The editor will act as a Client. A server will be started for you behind the scenes to connect to. */
	PIE_Client UMETA(DisplayName="Play As Client"),
};
  • PIE_Standalone

    单机玩法,本地直接有一个所谓的服务器和一个或多个玩家。因此尤其注意相关网络请求rpc,值复制等都是同步执行的

    应用:一般游戏的训练场啊,游戏大厅,新手引导关卡。不需要跟其他玩家交互的场景。

  • PIE_Client

    一般用于多人在线联网战斗局内,比如吃鸡游戏那种开房间成功后进入局内战斗,就是所谓的战斗局内,用这个比较多。

    应用:比如吃鸡游戏的战斗场景(与其他联网玩家战斗交互)。

  • PIE_ListenServer

    一般用于开发局域网游戏。

    应用:无(我没用过,现在好像没有开发局域网游戏的了吧)。


综上:就是方便为了给UE 编辑器用户开发测试使用。

ENetMode


 //* The network mode the game is currently running.*/
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_Standalone

    如果你开启的是PIE_Standalone,所谓的客户端和服务器的World()->GetNetMode()都会只是NM_Standalone.

  • NM_DedicatedServer

    如果你开启的是PIE_Client,服务器上的World()->GetNetMode()才会是NM_DedicatedServer.

  • NM_Client

    如果你开启的是PIE_Client,客户端上的World()->GetNetMode()才会是NM_Client.

  • NM_ListenServer

    如果你开启的是PIE_Standalone,所谓的客户端和服务器的World()->NetMode 都会只是PIE_Standalone.

ENetRole

class ENGINE_API AActor : public UObject
{
	/** Describes how much control the local machine has over the actor. */
	UPROPERTY(Replicated)
	TEnumAsByte<enum ENetRole> Role;

	/** Returns how much control the remote machine has over this actor. */
	UPROPERTY(Replicated, Transient)
	TEnumAsByte<enum ENetRole> RemoteRole;	
}

/** The network role of an actor on a local/remote network context */
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,
};

前面的ENetMode针对的是世界才能调用的,这个ENetRole是Actor才能调用的。你需要了解Actor是作为UE 可以同步的最小单元。
主要是Actor的Role和RemoteRole,大概描述的是这个Actor本地的控制性和远端的控制性。还有一点需要申明,只能是服务器复制Actor到客户端,客户端不会复制Actor到服务器。

服务器创建Actor

  • 不复制到客户端
  • Role:ROLE_Authority
  • RemoteRole:ROLE_None
  • 复制到客户端
  • Role:ROLE_Authority
  • RemoteRole:ROLE_SimulatedProxy 或 ROLE_AutonomousProxy

客户端创建Actor

  • Role:ROLE_Authority
  • RemoteRole:ROLE_None

应用:
从服务器复制一个Actor到ABCD四个客户端,那么我可以在这个Actor 的BeginPlay里判断打印log。

标签:网站,系统,解析,美元,DNS,模板,服务器,配置
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有