【Unet】客戶端同步GameObject 列表
阿新 • • 發佈:2019-02-15
Unity 內建 同步變數 支援同步一些資料型別
同步變數可以是基礎型別,如整數,字串和浮點數。也可以是Unity內建資料型別,如Vector3和使用者自定義的結構體,但是對結構體型別的同步變數,如果只有幾個欄位的數值有變化,整個結構體都會被髮送。每個NetworkBehaviour指令碼可以有最多32個同步變數
但是要是 同步 GameObject 列表呢?
其實很巧妙
有個前提只能同步 LocalPlayer
public List<GameObject> localCopyOfList = new List<GameObject>(); public void AddToList(GameObject obj) { if (!isLocalPlayer) throw new InvalidOperationException("This can only be called for the local player!"); if (obj.GetComponent<NetworkIdentity>() == null) throw new InvalidOperationException("Network only knows about GameObjects that have a NetworkIdentity!"); CmdAddToList(obj); } [Command] void CmdAddToList(GameObject obj) { // this code is only executed on the server RpcAddToList(obj); // invoke Rpc on all clients } [ClientRpc] void RpcAddToList(GameObject obj) { // this code is executed on all clients localCopyOfList.Add(obj); }