Unity5.1 新的網路引擎UNET(四) UNET Remote Actions

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.