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:
- isLocalPlayer, Check if yes, then run scripts, if no, then return. Scripts Local Player authority.....可以放在Update()里面。只作用在客户端,不会上传服务器。
- [Command] Cmd&...., 这个方法仅仅只会由Localplayer引用,发出给服务器执行(只运行于服务器端)。remote player的物体不会响应。作用原理与isLocalPlayer不相同。并且不能放在Update()上,会导致网络拥堵。
对于方法,如果希望服务器作用于客户端的话(通常用于view)
[ClientRpc] Rpc&.....这个方法由服务器引用,发出给客户端。相当于客户端输入并覆盖客户端其他输入,比较霸道。
对于属性,希望全网更新的话(通常用于View):
- [SyncVar]
- 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
(未完待续.....)