31

[从零开始的Unity网络同步] 1.在Unity中搭建网络模块-腾讯游戏学院

 5 years ago
source link: http://gad.qq.com/article/detail/288421
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

作者:烂笔头_27

前言


最近在鼓捣网络同步相关的东西,略有心得,故此打算写些心得和感悟,也方便以后重温复习.

1.在Unity中配置网络

虽然在Unity中有个自带的挂在GameObject上的Network组件,但这篇文章为了讲解清楚,就不介绍这些组件了,我们使用C#代码来搭建网络模块,Unity网络编程相关需要引入UnityEngine.Networking 命名空间.

1.1 启动服务端

以下是创建一个Server的代码

using UnityEngine.Networking;
// 启动服务器
public bool StartServer()
{  
    // 注册消息回调,当Server收到指定类型的消息时,会回调注册好的方法
    NetworkServer.RegisterHandler(MsgType.Connect, OnClientConnected);
    NetworkServer.RegisterHandler(MsgType.Disconnect, OnClientDisConnected);
    NetworkServer.RegisterHandler(MsgType.Error, OnError);
    // 监听20086端口
    bool succeed = NetworkServer.Listen(20086);
    if(succeed )
        Debug.LogWarning("服务器成功启动!");
    else
        Debug.LogErrorFormat("服务器无法启动,端口为{0}", 20086);
    return succeed;
}

仅仅几行代码,服务端的启动功能就完成了,成功启动的话,会返回true,如果启动失败,可以查看一下端口是否被占用了.此外,服务端还有一些配置相关的东西,在此就不做细讲了,可参考NetworkServer.Configure

1.2 启动客户端

接下来,创建一个客户端,其实跟Server的很类似,代码如下:

using UnityEngine.Networking;
// 启动客户端
public void StartClient()
{  
    // 创建NetworkClient对象
    client = new NetworkClient();
    // 注册消息回调,当Client收到指定类型的消息时,会回调注册好的方法
    client.RegisterHandler(MsgType.Connect, OnConnectedServer);
    client.RegisterHandler(MsgType.Disconnect, OnDisConnectedServer);
    client.RegisterHandler(MsgType.Error, OnError); 
    // 连接服务器
    client.Connect("127.0.0.1", 20086);      // 服务器IP 服务器端口
}

客户端调用Connect方法向服务器发送连接请求,当连接成功时,
服务端会回调OnClientConnected方法,
客户端会回调OnConnectedServer方法,
需要注意的是,当连接成功时,需要把NetworkMessage中的NetworkConnection保存起来,这个对象是 客户端与服务端的连接的封装 ,后续接收消息包/发送消息包需要用到.

private void OnClientConnected(NetworkMessage netMsg)
{
    Debug.LogWarning("OnClientConnected");
    connections.Add(netMsg.conn);                    //保存NetworkConnection对象,代表C/S之间的连接
}

另外,客户端的配置信息,可参考NetworkClient.Configure

1.3 效果图

开启两个Unity,一个作为服务端,另一个作为客户端.制作两个按钮,一个启动服务端,另一个启动客户端.

5bed22c59fa0d.png


首先启动服务端,然后再启动客户端.服务端打印如下:

5bed22f2dc517.png

客户端打印如下:
5bed230e71b1c.png

3.结语

就这样,很轻松的在Unity中搭建了网络模块,下一篇文章将说明如何实现<服务端与客户端之间通信>.



About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK