Синхронизация случайных чисел в UnityNetwork - PullRequest
0 голосов
/ 02 июля 2018

Я хочу назначить случайные числа моим объектам, которые появляются при запуске сервера, но каждый экземпляр игры создает свои собственные случайные числа, и они не синхронизируются вместе. Как я могу это исправить?

public class Health : NetworkBehaviour
{
    public Text PlanetHealth;
    public const int maxHealth = 100;

    [SyncVar(hook = "OnChangeHealth")]
    public int currentHealth = maxHealth;


    void Start()
    {
        if(this.gameObject.name == "GrayPlanet(Clone)")
        {
            currentHealth = Random.Range(0, 50);
            PlanetHealth.text = currentHealth.ToString();
        }
        else
            PlanetHealth.text = maxHealth.ToString();
    }

    public void TakeDamage(int amount)
    {
        if (!isServer)
        {
            return;
        }
        currentHealth -= amount;
        if (currentHealth <= 0)
        {
            currentHealth = 55;
        }
    }
    void OnChangeHealth(int currentHealth)
    {
        PlanetHealth.text = currentHealth.ToString();
    }
}

1 Ответ

0 голосов
/ 02 июля 2018

Просто добавьте это в начале вашего Start() метода:

if (!isServer)
{
    return;
}

Произвольную генерацию следует выполнять только на стороне сервера. После этого SyncVar выполнит работу по поддержанию актуальности экземпляров.

...