Version: Unreal 4.26
问题
- 为啥UE编辑器会有EPlayNetMode有三种让你选择 。
- 为啥描述World 的ENetMode 会有4种,而不只是(Client/Server 2种) 。
- 为何Actor 会有Role的概念 。
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.
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
经验总结扩展阅读
- 【lwip】09-IPv4协议&超全源码实现分析
- 38 全球名校AI课程库| 马萨诸塞大学 · 自然语言处理进阶课程『Advanced Natural Language Processing』
- 之七 2流高手速成记:基于Dubbo&Nacos的微服务简要实现
- 【Azure 事件中心】Event Hub 无法连接,出现 Did not observe any item or terminal signal within 60000ms in 'flatMapMany' 的错误消息
- 十一 前后端分离项目:实现"删"功能(前后端)
- <一>从指令角度了解函数堆栈调用过程
- .NET Conf 2022 &ndash; 11 月 8 日至 10 日
- 十 前后端分离项目:实现"改"功能(前后端)
- 「MySQL高级篇」MySQL之MVCC实现原理&&事务隔离级别的实现
- 九 前后端分离项目:实现"添加"功能(后端接口)