Проблема Unity Network ClientRpc. Не синхронизируется

У меня есть два игрока, и эти игроки бьют по мячу. Всякий раз, когда они ударяют, есть шанс, что цвет мяча может измениться (зеленый или красный). Но когда игрок ударяет по мячу, он меняет цвет мяча только для себя, мяч другого игрока имеет тот же цвет. Я хочу, чтобы все игроки видели один и тот же цвет. Вот код:

using UnityEngine;   
using UnityEngine.Networking;

public class ColorGreen : NetworkBehaviour
{

    // Use this for initialization
    [SyncVar]
    int temp = 0;
    void Start () {
        transform.GetComponent<Renderer>().material.color = Color.green;
    }

    // Update is called once per frame
    void Update () {



            if (!isServer)

                return;

            RpcCHANGE();


    }

    [ClientRpc]
   void RpcCHANGE()
    {
        temp = Random.Range(0, 2);
        if (temp == 0)
        {
            transform.GetComponent<Renderer>().material.color = Color.green;
        }
        else if(temp == 1)
        {
            transform.GetComponent<Renderer>().material.color = Color.red;
        }

    }
}

Объект Ball имеет сетевую идентификацию с проверкой «Local Player Authority». Ребята, подскажите, что я сделал не так?

Спасибо.


person Tayfur Gazioglu    schedule 15.11.2015    source источник


Ответы (1)


Я думаю, что когда вы вызываете RpcCHANGE, он вызывается на каждом экземпляре сети, запуская код внутри метода отдельно. Это означает, что результат Random.Range(0, 2); различен для каждого клиента.

Вместо этого вы можете сгенерировать случайный цвет в методе обновления и передать цвет в RpcCHANGE, в результате чего каждый экземпляр сети будет изменен на один и тот же цвет.

person Tom    schedule 11.08.2016