码迷,mamicode.com
首页 > 编程语言 > 详细

Unity5.1 新的网络引擎UNET(六) UNET Multiplayer Lobby

时间:2015-07-12 23:25:37      阅读:366      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!