Unity3d学习笔记之(五)--MultiPlayer and networking

Concepts:

1, Sever, Local Client, Remote Client.

isSever, isClient.

2, Local Player,

isLocalPlayer

3,Local authority, hasAuthority

isAuthority

Components:

1,NetworkManager

在Spawn信息部分把物体加入进去。这样服务器端才会spawn这个物体给到客户端。Player spawn, 发生于游戏开始,other spawn, 发生于networkServer.spawn(); 也可以在游戏开始spawn,就要重写OnStartServer()方法。

2,NetworkManagerHUD

3,NetworkIdentity

Local Player authority, 本地玩家可以控制这个物体。如果本地玩家不需要控制这个物体,则不勾选。

Sever Only, 只能由服务器端控制,本地玩家无法控制。

4,NetworkTransform

把物体的位移和旋转同步给到服务器和其他玩家。

5,Scripts

network修改,using network, :networkbehavior, scripts 必须放在根物体上。

如果不做修改,则不能使用下面的通讯交互。(对于spawn和Desdroy一类的交互,可以交给NetworkManger 中的Spawn来处理,不需要改动代码)

对于方法,如果不希望影响其他玩家的话(通常用于Control),两种方式来作用于LocalPlayer:

  1. isLocalPlayer, Check if yes, then run scripts, if no, then return. Scripts Local Player authority.....可以放在Update()里面。只作用在客户端,不会上传服务器。
  2. [Command] Cmd&...., 这个方法仅仅只会由Localplayer引用,发出给服务器执行(只运行于服务器端)。remote player的物体不会响应。作用原理与isLocalPlayer不相同。并且不能放在Update()上,会导致网络拥堵。

 

对于方法,如果希望服务器作用于客户端的话(通常用于view)

[ClientRpc] Rpc&.....这个方法由服务器引用,发出给客户端。相当于客户端输入并覆盖客户端其他输入,比较霸道。

对于属性,希望全网更新的话(通常用于View):

  1. [SyncVar]
  2. isSever,Check if yes, then run scripts, if no, then return. Scripts Server authority.....

对于组件状态,由于不能加上[SyncVar],所以使用Hook, 单独写一个方法来改动组件状态。

[SyncVar(hook=“FuncionName”)]

6, NetworkStartPosition

Player Spawn Methods: Random and Round Robin

(未完待续.....)

 

 

猜你喜欢

转载自www.cnblogs.com/wng0/p/9626398.html