如何将消息或事件发送到Server Unity3D?

时间:2018-07-23 17:50:27

标签: unity3d networking

我正在学习Unity中的联网。我对如何从客户端向服务器发送消息或事件感到困惑。我已经有了这些脚本,可以成功地将客户端连接到服务器。

这是我的服务器脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class ServerNetwork : MonoBehaviour {

    void Start()
    {
        SetupServer();
    }

    // Create a server and listen on a port
    public void SetupServer()
    {

        NetworkServer.Listen(4444);
        NetworkServer.RegisterHandler(MsgType.Connect, OnClientConnected);
        Debug.Log("Server is running");
    }

    void OnClientConnected(NetworkMessage netMsg)
    {
        Debug.Log("Client connected");
        Debug.Log(netMsg.msgType);
    }
}

这是我的客户端脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class ClientNetwork : MonoBehaviour {

    NetworkClient myClient;
    public bool isClientConnected = false;

    void Start()
    {
        SetupClient();
    }

    // Create a client and connect to the server port
    public void SetupClient()
    {
        myClient = new NetworkClient();
        myClient.RegisterHandler(MsgType.Connect, OnConnected);
        myClient.Connect("127.0.0.1", 4444);
        isClientConnected = true;
    }

    // client function
    public void OnConnected(NetworkMessage netMsg)
    {
        Debug.Log("Connected to server");
    }
}

服务器脚本附加到ServerScene上的“ NetworkManager”对象上

客户端脚本已附加到ClientScene上的“ NetworkManager”对象上

我仅构建了ClientScene作为客户端运行,并在编辑器中运行ServerScene

有了这些脚本,我已经可以将客户端连接到服务器了。由此,如何从客户端到服务器进行通信?

这里的目的是每秒将实时分数从客户端发送到服务器。

谢谢

1 个答案:

答案 0 :(得分:0)

您必须使用[SyncVars]属性。简而言之,它所做的是将变量从客户端同步到服务器。这是Unity3d文档中的一个简单示例。

[SyncVar]
int health;

public void TakeDamage(int amount)
{
    if (!isServer)
        return;

    health -= amount;
}

另一种方法是使用Unity3D的自定义WebSocket实现。 GitHub上有一些非常好的。也请看看文档Unity3d