Network
Network类是unity里实现网络操作的核心类,并提供一系列静态方法来实现网络链接的操作,这个类配置了网络接口和所有网络参数。可以使用它来设置一个服务器或连接到一个服务器并有一些辅助函数来帮助你完成这些功能。在Unity2018.2.3版本里被移除
- 初步使用的方法
**InitializeServer(),**初始化服务器,两个重载的方法。
public static NetworkConnectionError InitializeServer(int connections, int listenPort);
public static NetworkConnectionError InitializeServer(int connections, int listenPort, bool useNat);
三个参数分别是:连接用户的数量 端口号,是否使用Nat。
. 涉及知识点
Network.peerType是端的状态,是一个枚举类型——NetworkPeerType,有四种状态
-
连接后常用的方法
.OnServerInitialized() 每当服务器调用Network.InitializeServer()完成后调用的方法
Network.OnPlayerConnected(NetworkPlayer) 每当一个新玩家成功连接时,在服务器上调用这个函数
NetworkPlayer是一个结构类,返回另一个玩家的数据结构。 这里简单做一下介绍,大家有兴趣可以去查文档
OnConnectedToServer() 客户端连接上服务器时调用的方法Network.OnConnectedToServer() 当连接到服务器时调用方法
更新代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyNetWork : MonoBehaviour {
int port = 8866;//端口号;
int connections = 10;//链接数;
bool useNet = false;
string ip = "127.0.0.1";
// Use this for initialization
void Start () {
}
private void OnGUI()
{
//服务器未连接
if (Network.peerType == NetworkPeerType.Disconnected)
{
if (GUILayout.Button("创建服务器"))
{
NetworkConnectionError error = Network.InitializeServer(connections, port, useNet);
print(error);
}
if (GUILayout.Button("连接服务器"))
{
NetworkConnectionError error = Network.Connect(ip, port);
print(error);
}
}
//服务器已经创建
else if (Network.peerType == NetworkPeerType.Server)
{
GUILayout.Label("服务器已经创建");
}
//服务器已经连接
else if (Network.peerType == NetworkPeerType.Client)
{
GUILayout.Label("已经连接");
}
}
//服务器初始化时调用
void OnServerInitialized()
{
print("初始化服务器成功");
}
//用户连接进来时调用
private void OnPlayerConnected(NetworkPlayer player)
{
print("玩家:"+player+"连接进来 IP:"+player.ipAddress);
}
private void OnConnectedToServer()
{
print("连接倒服务器");
}
}
启动了两个客户端,一个当服务器,一个客户端.都是在本机执行。效果如下
-同步实例化方法,Network.Instantiate()
public static Object Instantiate(Object prefab, Vector3 position, Quaternion rotation, int group);
此方法实现实例化后,会网络实例化一个预制件。其他所有连接上的客户都将立即调用服务器相同的方法,来实现实例化。
public class MyNetWork : MonoBehaviour {
int port = 8866;//端口号;
int connections = 10;//链接数;
bool useNet = false;
string ip = "127.0.0.1";
int group;
public GameObject eyes;
// Use this for initialization
void Start () {
}
private void OnGUI()
{
//服务器未连接
if (Network.peerType == NetworkPeerType.Disconnected)
{
if (GUILayout.Button("创建服务器"))
{
NetworkConnectionError error = Network.InitializeServer(connections, port, useNet);
print(error);
}
if (GUILayout.Button("连接服务器"))
{
NetworkConnectionError error = Network.Connect(ip, port);
print(error);
}
}
//服务器已经创建
else if (Network.peerType == NetworkPeerType.Server)
{
GUILayout.Label("服务器已经创建");
}
//服务器已经连接
else if (Network.peerType == NetworkPeerType.Client)
{
GUILayout.Label("已经连接");
}
}
//服务器初始化时调用
void OnServerInitialized()
{
//初始化预制体
group = int.Parse(Network.player.ToString());
Network.Instantiate(eyes,Vector3.zero,Quaternion.identity,group);
print("初始化服务器成功");
}
//用户连接进来时调用
private void OnPlayerConnected(NetworkPlayer player)
{
print("玩家:"+player+"连接进来 IP:"+player.ipAddress);
}
private void OnConnectedToServer()
{
print("连接倒服务器");
}
}
效果图