Unity5之Network人物復活位置同步客戶端

本節講解,在network裏主角死亡之後復活,且同步到所有客戶端的功能。

本文還是接着前幾篇的network系列的文字來講。所以代碼也接着上一篇博文。

代碼如下:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.Networking;

public class health : NetworkBehaviour {


    public const int maxhealth = 100;

    [SyncVar (hook ="changevalue")]//同步變量,改變currenthealth的值。一直會調用changevalue方法。
    public int currenthealth = maxhealth;

    public Slider healthslider;


    /// <summary>
    ///在Server端運行
    /// </summary>
    /// <param name="damage"></param>
    public void Takedamage(int damage)
    {
        if (isServer == false)
        {
            return;
        }

        currenthealth -= damage;
        if (currenthealth<=0)
        {
            currenthealth = maxhealth;
            Rpcspawnnew();//滿血復活到原點
        }       
        
    }
    /// <summary>
    /// 該方法裏需要定義一個參數,傳入的參數就是上面定義的同步的currenthealth的值
    /// </summary>
    /// <param name="healthvalue"></param>
    void changevalue(int healthvalue)
    {
        healthslider.value = healthvalue / (float)maxhealth;
    }

    /// <summary>
    /// 所有客戶端同步執行該方法
    /// </summary>
    [ClientRpc]
    void Rpcspawnnew()
    {
        if (isLocalPlayer == false)
        {
            return;
        }
        transform.position = Vector3.zero;
    }
}

此次代碼所有修改的地方就是在當任務血量爲零時,人物血量值變爲最大(滿血復活),又添加了一個Rpcspawnnew()方法。該方法是爲了設置人物滿血復活後的位置。

因爲掉血代碼是在服務器上執行,所以調用的Rpcspawnnew方法也只會在服務器端生效。

因此我們使用了[ClientRpc]標記,這個標記的作用就是讓所有客戶端執行該方法。語法規定:被[ClientRpc]標記的方法必須要以Rpc開頭來命名方法,因此方法名爲Rpcspawnnew。

這樣就實現了,某一個客戶端人物復活後位置會同步到所有客戶端,即所有客戶端都可以看到,效果如下(下面是兩個客戶端運行):




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章