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();//断开连接
}
}