该是一个专门的网络管理器,它提供了Unity多人游戏大厅。其功能包括以下内容:
以下是在服务器上调用的NetworkLobbyManager虚拟函数:
• OnLobbyStartHost
• OnLobbyStopHost
• OnLobbyStartServer
• OnLobbyServerConnect
• OnLobbyServerDisconnect
• OnLobbyServerSceneChanged
• OnLobbyServerCreateLobbyPlayer
• OnLobbyServerCreateGamePlayer
• OnLobbyServerPlayerRemoved
• OnLobbyServerSceneLoadedForPlayer
• OnLobbyServerPlayersReady
上述所有的服务器函数都有空的默认实现,除了使用PlayScene OnLobbyServerPlayersReady
调用ServerChangeScene
。
以下是在客户端上调用的NetworkLobbyManager虚拟功能:
• OnLobbyClientExit
• OnLobbyClientConnect
• OnLobbyClientDisconnect
• OnLobbyStartClient
• OnLobbyStopClient
• OnLobbyClientSceneChanged
• OnLobbyClientAddPlayerFailed
所有上述客户端函数都有空的默认实现。
有两种玩家对象,其中每个在中都有一个Prefab
插槽。插槽可以在此屏幕截图中看到:
当玩家加入大厅时,LobbyPlayer
从LobbyPlayerPrefab
创建:
• 每个玩家一个LobbyPlayer
• 客户端连接时创建,或添加玩家
• 存在,直到客户断开连接
• 为大厅持有此玩家的就绪标志
• 在大厅里处理命令
• 将用户脚本添加到此预制中以保存特定于游戏的玩家数据
• 该预制件必须具有NetworkLobbyPlayer组件
该最低玩家字段代表在大厅“准备就绪”的玩家的最小数目与开始比赛。如果连接的客户端数量超过“最低限度玩家数”值,则等待所有连接的客户端变为“就绪”,即可启动匹配。
例如,如果“Minimum Players”设置为2:
• 启动一个游戏实例并启动主机。然后在游戏大厅界面中,按您的播放器的开始。您仍处于大厅模式,因为开始游戏的最少Ready玩家人数为2人。
• 开始另外两个游戏实例,并在那里启动客户端。“Minimum Players”设置为2并不重要。等待所有连接的玩家变为Ready。
GamePlayer
在游戏开始时由GamePlayerPrefab
创建:
所述NetworkLobbyPlayer
组件用于LobbyPlayer
对象。它提供了一些可用于自定义大厅行为的虚拟功能回调
public virtual void OnClientEnterLobby();
public virtual void OnClientExitLobby();
public virtual void OnClientReady(bool readyState);
当游戏进入大厅时,客户端会调用函数OnClientEnterLobby
。这种情况发生在大厅场景第一次启动时,以及从游戏场景返回到大厅时。
OnClientReady
函数在该玩家的就绪状态改变时在客户端上被调用。
向多人游戏添加网络大厅的过程(不使用多人游戏大厅资产包):
• 创建一个新的大厅场景
• 作为第一个场景,将场景添加到构建设置(菜单:文件 > 构建设置...)
• 在新场景中创建一个新的GameObject(菜单:GameObject > Create Empty),并将其命名为LobbyManager
• 在NetworkLobbyManager组件添加到LobbyManager游戏对象
• 将NetworkManagerHUD组件添加到LobbyManager GameObject
• 在用于NetworkLobbyManager部件检查员窗口中,设置大堂场景的NetworkLobbyManger到现场时隙包含LobbyManager游戏对象
• 将NetworkLobbyManager 的Play Scene插槽设置为游戏的主游戏场景
• 创建一个新的GameObject并将其命名为LobbyPlayer
• 将NetworkLobbyPlayer组件添加到LobbyPlayer
• 为LobbyPlayer创建一个预制件(将其拖动到“项目”窗口中),然后从场景中删除该实例
• 在LobbyManager的NetworkLobbymanager组件上,将LobbyPlayer预制件分配给大厅播放器预制插槽
• 将主游戏中玩家的预制分配给游戏玩家预制插槽
• 保存场景
此版本的NetworkLobbyManager
使用OnGUI
用户界面,如NetworkManagerHUD
。要获得更好的用户界面,请使用多人大厅资产包(可在Unity论坛的NetworkStarter示例包中找到)。
NetworkLobbyManager
具有许多可用于自定义大厅行为的虚拟功能回调。最重要的是OnLobbyServerSceneLoadedForPlayer
,它在从大厅过渡到主游戏时在每个玩家的服务器上调用。这是将大厅设置应用于玩家对象的理想场所。
Unity资产商店中有一个示例项目,它使用NetworkLobbyManager
并为大厅提供。这可以作为与大厅进行多人游戏的起点。
大堂示例项目