标签:unity5.1 unet unity unity3d 网络引擎
孙广东 2015.7.12
Multiplayer Lobby 多人游戏大厅
很多多人游戏 都有一个暂存区(staging area ):实际游戏之前等待所有玩家加入的地方,在这一area - 通常被称为 “lobby”, 玩家可能能够选择选项,能将自己设置为准备好后比赛开始。
NetworkLobbyManager 是专门的NetworkManager网络管理器,可以提供Unity多人游戏大厅(Unity Multiplayer lobby )。它包括:
? 限制可以加入的players 的数量
? 每个客户端支持多个players ,那么限制每个客户端的玩家数量
? 防止玩家游戏in-progress时加入
? 每名player 准备好状态,所以,游戏开始时所有玩家都是准备好了
? 每个player 配置数据
? 当比赛结束的时候重新加入大厅
? 虚拟函数,它允许自定义逻辑来 lobby events
GuiLobbyManager 是为lobby 特殊lobby 管理,提供了UI 。它可以作为一个资产包(asset package ),可以导入Unity项目轻松地添加一个lobby 到多人游戏。脚本和 UI 预置在包中可以定制,为使外观和感觉与众不同。
有两种player 对象- 在NetworkLobbyManager中的每个预制的插槽(prefab slot ) :
LobbyPlayer 对象
? 每个player
? 创建客户端连接,或添加player时 被创建
? 一直存在直到客户端断开连接
? 为该player在大堂准备好了flag
? 在大厅里处理命令
? 将用户脚本添加到prefab来保存特定于游戏的玩家数据
GamePlayer 对象
? 每个player
? 当开始游戏场景时创建
? 重新进入大厅时被摧毁
? 在游戏中处理命令
NetworkLobbyPlayer 组件用于 LobbyPlayer 的对象。它提供了一些可用于自定义大堂行为的虚函数回调
public virtual void OnClientEnterLobby() { } public virtual void OnClientExitLobby() { } public virtual void OnClientReady(bool readyState) { }
添加 Lobby 到一个 Game:
将 NetworkLobby 添加到多人游戏 (不使用多人游戏大厅 资产包) 的过程:
? 创建一个新的LobbyScene大堂场景
? 场景添加到 build settings,将作为第一个场景
? 在新场景中创建一个新的游戏物体,将它重命名为 LobbyManager
? 将 NetworkLobbyManager 组件添加到 LobbyManager 对象
? 将 NetworkManagerHUD 组件添加到 LobbyManager 对象
? 打开 NetworkLobbyManager 组件在inspector面板上
? 将 LobbyScene 设置为当前场景
? 将 PlayScene 设置为主要进行游戏的游戏场景
? 创建一个新的游戏对象并将它重命名为 LobbyPlayer
? 将 NetworkLobbyPlayer 组件添加到 LobbyPlayer
? 为 LobbyPlayer 创建为一个预置体,从现场删除这个实例
? 设置 LobbyPlayerPrefab 插槽为 LobbyPlayer 预置体
? 在main game中的player的GamePlayerPrefab 插槽设置 为这个预制体
? 保存场景。
? 运行游戏
此版本的NetworkLobbyManager使用了 OnGUI 用户界面,像 NetworkManagerHUD 。关于更好的用户界面请 使用的多人游戏大厅资产包(multiplayer-lobby asset package.
)。
NetworkLobbyManager 有很多可用于自定义大堂行为的虚函数回调。最重要的是 OnLobbyServerSceneLoadedForPlayer 被服务器上每个player调用,因为他们从大厅过渡到main game。这是应用设置的理想场所 ,从大堂到玩家的游戏对象。
// for users to apply settings from their lobby player object to their in-game player object public override bool OnLobbyServerSceneLoadedForPlayer(GameObject lobbyPlayer, GameObject gamePlayer) { var cc = lobbyPlayer.GetComponent<ColorControl>(); var player = gamePlayer.GetComponent<Player>(); player.myColor = cc.myColor; return true; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
Unity5.1 新的网络引擎UNET(六) UNET Multiplayer Lobby
标签:unity5.1 unet unity unity3d 网络引擎
原文地址:http://blog.csdn.net/u010019717/article/details/46851033