您的位置:首页 > 移动开发 > Unity3D

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

2017-02-15 14:08 681 查看
客户端连接服务器

当客户端连接到服务器时,必须有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
4000
!= 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++开发服务器实现多人游戏(三)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: