Unity NetWork

NetWork

在unity中可以使用其自带的NetWork进行局域网游戏的开发。

创建服务器:(Network.InitializeServer)

这里我们可以查看官方的API。

  • 需要三个参数(连接数,端口,是否使用nat技术)
Unity NetWork_第1张图片
Paste_Image.png
Unity NetWork_第2张图片
Paste_Image.png

我们使用OnGUI进行测试。

  • 可以看见Network.InitializeServer()方法是初始化一个服务器,返回类型为NetworkConnectionError。
Unity NetWork_第3张图片
Paste_Image.png
  • 我们用NetworkConnectionError类型的对象来保存并打印它。当发现Noterror时,说明创建成功。
Paste_Image.png

连接服务器

连接服务器使用Network.Connect()方法返回值同样为NetworkConnectionError

Unity NetWork_第4张图片
Paste_Image.png
Unity NetWork_第5张图片
Paste_Image.png

Network.peerType:为当前主机状态属性。(枚举值共有4种)Client代表已经连接到了服务器作为了一个客户端。Connecting代表是否在连接服务器中的状态。Disconnected表示断开连接。Sever表示作为了服务器状态。

Unity NetWork_第6张图片
Paste_Image.png

将之前的几个API联合起来使用

Unity NetWork_第7张图片
Paste_Image.png

NetWork相关的回调方法。

  • MonoBehaviour.OnServerInitialized() 当服务器初始化的时候调用

  • MonoBehaviour.OnPlayerConnected(Network Player) 当有客户端连接进来时。( //在服务器端调用)
    这里的Player参数代表一个客户端。
    直接输出Player是一个index,这个index从1开始
    可以通过 player.ipAddress和player.port来获取连接进来的客户端的IP地址和端口号。

  • MonoBehaviour.OnConnectedToServer() 当客户端成功连接到服务器的时候调用,(//在客户端调用,与上面不同,上面是在服务器端运行,这个是在客户端上运行,但它们都位于同一个代码块,Unity中的NetWork的客户端和服务器端是不分家的)

游戏对象的同步与数据共享。

  • 既然我们使用了Network构建了一个局域网,我们如果直接使用GameObject类来进行初始化对象,则客户端上不会有任何反应,因为它只是在本地创建了,如果想在局域网上进行同步,我们需要使用Network.Instantiate(//参数同GameObject的一样,但多了个group参数)方法来初始化对象。
Unity NetWork_第8张图片
Paste_Image.png
  • 这里的group用于将初始化的对象进行,以辨别是哪一个客户端创建的对象,一般使用Network.player设置//直接访问Network.player会得到当前客户端的索引。(唯一的)

  • 这样就解决角色同步的问题。

但我们会发现当我们在服务器开始时创建一个对象,在客户端连接成功时创建一个对象。我们会发现创建好的服务器端,在客户端连接时,客户端又重新创建了两个Cube。并没与服务器端的对象进行同步。

  • 我们通过添加Network View来进行transform的同步。
Paste_Image.png

NetWorkView :在局域网内去同步一个游戏物体属性

NetWorkView :会把创建出来它的客户端作为主人,它会以它创建的这个客户端的位置信息为准,在其他客户端修改不属于当前客户端创建对象的transform则无法进行同步。其他的客户端会以创建此对象的主客户端的信息为准

你可能感兴趣的:(Unity NetWork)