游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2848|回复: 0

Unity结合C++开发服务器实现多人游戏(二)

[复制链接]

29

主题

38

帖子

384

积分

中级会员

Rank: 3Rank: 3

积分
384
QQ
发表于 2017-2-15 14:59:34 | 显示全部楼层 |阅读模式
客户端连接服务器

当客户端连接到服务器时,必须有ProudNet的NetClient对象.我们将该对象添加到客户端的NetManager.cs.

客户端使用ProudNet客户端库的情况,请参考Unity plugin 说明
public class NetManager : MonoBehaviour
{
    NetClient m_netClient;
...
NetManager开始时创建NetClient实例.
    void Start()
    {
        m_netClient = new NetClient();
...
NetClient进行事件或者信息的处理,此函数被称作NetClient.FrameMove.对此进行短时间的反复调用.
    void Update()
    {
        if (m_netClient != null)
        {
            m_netClient.FrameMove();
...
程序结束时,中断NetClient.
void OnApplicationQuit()
{
    // #SHOW08 Stop
    m_netClient.Disconnect();
}
现在,点击Login键修改代码以连接到服务器.OnGUI修改如下.
调用NetClient.Connect尝试连接到服务器.
该函数需要服务器的endpoint (地址和端口)和协议版本.
void OnGUI()
{
    if (m_state == MyState.Disconnected || m_state == MyState.Connecting)
    {
        if (m_state == MyState.Disconnected)
        {
            if (GUI.Button(new Rect(10, 130, 100, 20), "Login!"))
            {
                var connectParam = new NetConnectionParam();
                connectParam.protocolVersion = new Guid();
                connectParam.protocolVersion.Set(Version);
                connectParam.serverIP = "localhost";
                connectParam.serverPort = ServerPort;
                m_netClient.Connect(connectParam);
                m_state = MyState.Connecting;
    ...
协议版本用来防止连接,如果客户端和服务器是不同的版本。当客户端程序的网络协议发生改变时,建议更改该值.网络协议版本将取决于收发信息的各种格式.
public static System.Guid Version = new System.Guid("{0x107b3b66,0xb7de,0x4091,{0xa5,0xba,0x72,0xca,0x1a,0xf5,0x1a,0xbc}}");
public static ushort ServerPort = 35475;
客户端试图连接到服务器,并获取结果.为得到结果进行NetClient.JoinServerCompleteHandler事件处理,为此事件添加代码.
在这里,在代码服务器地址被指定为localhost,同时输入您的服务器地址.
在命令中输入ipconfig或者ifconfig来显示您的服务器地址.
m_netClient.JoinServerCompleteHandler =
    (ErrorInfo info, ByteArray replyFromServer) =>
{
    if (info.errorType == ErrorType.ErrorType_Ok)
    {
        m_state = MyState.Connected;
    }
    else
    {
        Debug.Log(info.ToString());
        m_state = MyState.Disconnected;
    }
};
进行防止与服务器断开连接的处理.假如可能出现小狗咬坏网线的情况.
如下所示,实现LeaveServerHandler.
m_netClient.LeaveServerHandler = (ErrorInfo info) =>
{
    Debug.Log(info.ToString());
    m_state = MyState.Disconnected;
};
现在,让我们运行客户端.按下Login按键显示"Connecting..."这样的状态.
因为,没有可连接的服务器,所以需要添加服务器,下一节再进行介绍.

第三篇:Unity结合C++开发服务器实现多人游戏(三)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-15 20:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表