標籤:unity5.1 unet unity3d unity 網路引擎
孫廣東 2015.7.12
網路系統 具有網路中執行操作actions 的方法。這些類型的actions 有時是調用遠端程序呼叫(Remote Procedure Calls)。在網路系統中有兩種類型的 Rpc :
1、Commands 命令- 從用戶端調用 和 運行在伺服器上。
2、ClientRpc calls - 並在伺服器上調用 和 用戶端上運行。
顯示了遠程操作的方向:
Commands:
命令是 從在用戶端player對象 發送到伺服器上的player對象。為了安全,命令 只能從YOUR player 對象發送,所以你不能控制其他玩家的對象。要使一個函數成為一個命令,將[Command] 自訂特性 添加到它,並添加 "Cmd" 首碼。當它在用戶端被調用時,此函數將現在運行在伺服器上。任何參數自動將傳遞到伺服器的命令。
Commands 函數 命令功能必須有首碼 "Cmd"。這是一個暗示,當閱讀代碼調用該命令時,此函數是特殊,並不像正常的函數在本地被調用.
class Player : NetworkBehaviour{ public GameObject bulletPrefab; [Command] void CmdDoFire(float lifeTime) { GameObject bullet = (GameObject)Instantiate( bulletPrefab, transform.position + transform.right, Quaternion.identity); var bullet2D = bullet.GetComponent<Rigidbody2D>(); bullet2D.velocity = transform.right * bulletSpeed; Destroy(bullet, lifeTime); NetworkServer.Spawn(bullet); } void Update() { if (!isLocalPlayer) return; if (Input.GetKeyDown(KeyCode.Space)) { CmdDoFire(); } }}
小心, 它將每一幀從用戶端發送命令! 這會導致大量的網路流量。
預設情況下,命令都是zero零 - 預設在可靠通道上發送的。因此,預設情況下所有命令可靠地都發送到伺服器。這可以定製 “Channel” 參數的 [Command] 自訂屬性。此參數應為一個整數,表示通道數。
Channel 通道 1 是設定在預設情況下、是不可靠的通道,所以要使用這個,使用命令屬性 參數的值為 1的 ,: 像這樣的
[Command(channel=1)]
ClientRpc Calls:
ClientRpc 調用是,從伺服器上的對象發送到用戶端上的對象。他們可以從任何伺服器對象發送,一個已經產生了的 NetworkIdentity 。因為伺服器具有authority授權,然後沒有安全性方面的問題,伺服器對象能夠發送這些調用。 要做成 ClientRpc 調用一個函數,將 [ClientRpc] 自訂特性添加到函數上,並添加 "Rpc" 首碼。它在伺服器上調用時,此函數將運行在用戶端上。任何參將數自動傳遞給 ClientRpc 調用用戶端。
ClientRpc 函數必須具有首碼 "Rpc" 。這是一個暗示,閱讀代碼調用該方法時,此函數是特殊,並不像正常的功能在本地調用.
class Player : NetworkBehaviour{ [SyncVar] int health; [ClientRpc] void RpcDamage(int amount) { Debug.Log("Took damage:" + amount); } public void TakeDamage(int amount) { if (!isServer) return; health -= amount; RpcDamage(amount); }}
當作為一個 LocalClient 的主機遊戲運行時, ClientRpc 將被將被LocalClient調用 -,即使它是在相同的伺服器處理序。所以 LocalClients 和 RemoteClients 的行為是相同的, 對於ClientRpc 調用。
??
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Unity5.1 新的網路引擎UNET(四) UNET Remote Actions