Unity3D Network如何限制玩家人数

最近研究了一下Unity自带的Network组件,此组件可以方便快捷的实现一个简单的多人局域网。不过本人在限制玩家人数的问题上卡住了,研究了一下,看看我的新发现吧。

网上看到有 OnPlayerConnected(Network Player) 这个方法,这个方法会在有玩家进入服务器时运行,不过好像已经过时了。

后来又发现了 numPlayer 这个参数,这个参数在 NetworkManager 中,用来返回当前在线人数,不过只有主机是准确的,其他客户端都是从自己连接后开始算起

简单说一下用法:

    NetworkManager networkManager;//网络管理器

    void Start ()
    {
        networkManager =  GetComponent<NetworkManager>();//获取网络管理器
    }

	void Update ()
    {
        if (!isLocalPlayer) return;//如果不是本地则返回
        if (Input.GetMouseButtonDown(0))//当鼠标左键按下
        {
            int playerNumber = networkManager.numPlayers;//获取在线人数
            print(playerNumber);//显示当前在线人数
        }
	}

最后我找到了 public override void OnStartLocalPlayer() 这个方法,此方法和 OnPlayerConnected(Network Player) 一样,都是在玩家进入服务器时运行,只不过 public override void OnStartLocalPlayer() 只在客户端本地运行

限制玩家人数代码:

public override void OnStartLocalPlayer()//当玩家进入服务器时运行
    {
        GameObject[] g = GameObject.FindGameObjectsWithTag("Player");//(通过标签)获取所有玩家
        if (g.Length > 8)//如果当前在线人数超出人数范围
        {
            NetworkManager n = GameObject.Find("NetManager").GetComponent<NetworkManager>();//获取网络管理器
            n.StopHost();//断开连接
        }
    }
07-24 16:51