如何在使用NetworkManager Unity时触发OnPlayerConnected?

Nur*_*lik 1 c# unity-game-engine unity-networking

我正在使用UNet和NetworkManager组件.我试图连接到服务器的玩家只是对我说"我已经连接"了.我必须序列化.我正在使用NetworkBehaviour,我认为这可能导致失败.但是我如何序列化呢?

这是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.Networking;
public class MultiPlayerOyunKontrol : NetworkBehaviour
{

    void OnPlayerConnected(NetworkPlayer player)
    {
        Debug.Log("Player  baglandi"+this.transform.name);
    }
}
Run Code Online (Sandbox Code Playgroud)

Pro*_*mer 5

OnPlayerConnected功能甚至不是UNet API的一部分.它是Unity遗留网络API的一部分.这是应该如何使用:

public class MultiPlayerOyunKontrol : MonoBehaviour 
{
    void OnPlayerConnected(NetworkPlayer player)
    {
        Debug.Log("Player  baglandi"+this.transform.name);
    }
}
Run Code Online (Sandbox Code Playgroud)

public class MultiPlayerOyunKontrol : NetworkBehaviour
{

    void OnPlayerConnected(NetworkPlayer player)
    {
        Debug.Log("Player  baglandi"+this.transform.name);
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上,OnPlayerConnectedNetworkBehaviour此无关,因此除非您使用的是旧的Unity网络API,否则它将无法正常工作.

以下是查看客户端何时与UNet连接或断开连接的正确方法:

void Start()
{
    NetworkServer.Listen(9000);
    NetworkServer.RegisterHandler(MsgType.Connect, OnConnected);
    NetworkServer.RegisterHandler(MsgType.Disconnect, OnDisconnected);
    NetworkServer.RegisterHandler(MsgType.Error, OnError);
}

public void OnConnected(NetworkMessage netMsg)
{
    Debug.Log("Client Connected");
}

public void OnDisconnected(NetworkMessage netMsg)
{
    Debug.Log("Disconnected");
}

public void OnError(NetworkMessage netMsg)
{
    Debug.Log("Error while connecting");
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!!NetworkServer.Listen(9000); 当然是端口号,不是吗? (2认同)