死亡和重生

現在,當角色血量到零時只會顯示Log,而不會有其他效果。現在我們希望能在血量到零時,會回到出生點。

所以現在介紹另外一項同步的工具,屬性 [ClientRpc] 。ClientRpc 可以在伺服器端,被任何掛有 NetworkIdentity 的產生物件發送。 Command 是從客戶端發送,由伺服器執行,而 ClientRpc 剛好相反,是由伺服器發送,由客戶端執行。

  1. 在 Health 腳本新增方法 Respawn ,讓伺服器端,TakeDamage 方法內判斷玩家血量等於零時,去呼叫此方法。
  2. 就像使用 Command 一樣,使用 ClientRpc 的方法名稱也需要加上Rpc前綴詞。
    [ClientRpc]
    void RpcRespawn()
    {
     if (isLocalPlayer)
     {
         // move back to zero location
         transform.position = Vector3.zero;
     }
    }
    
  3. 現在回到 TakeDamage 方法做修改,設定血量回到預設值。
    currentHealth = maxHealth;
    
  4. 用呼叫 RpcReSpawn 方法來取代原先的 Log
    // called on the Server, but invoked on the Clients
    RpcRespawn();
    
  5. 之前的示範都是客戶端控制角色,因為客戶端有 LocalAuthority 。所以伺服器端只有在角色血量歸零時,直接移回出生點的話,客戶端可以輕易的覆蓋伺服器端的結果。
  6. 要避免這種情況,伺服器端藉由 ClientRpc 來控制所有連線的客戶端角色血量歸零時回到原點。因為角色掛載 Network Transform ,而所有的客戶端都會同步位置。
  7. 測試,現在當角色血量歸零時,所有的客戶端該角色都會同步自動回到出生點。

results matching ""

    No results matching ""