C# 在UnityNetwork中同步随机数

C# 在UnityNetwork中同步随机数,c#,unity3d,unet,C#,Unity3d,Unet,我想将随机数分配给服务器启动时生成的对象,但游戏的每个实例都会生成自己的随机数,并且它们不会同步在一起,我如何解决这个问题 public class Health : NetworkBehaviour { public Text PlanetHealth; public const int maxHealth = 100; [SyncVar(hook = "OnChangeHealth")] public int currentHealth = maxHealt

我想将随机数分配给服务器启动时生成的对象,但游戏的每个实例都会生成自己的随机数,并且它们不会同步在一起,我如何解决这个问题

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();
    }
}
公共类健康:网络行为
{
公共文本平面图;
public const int maxHealth=100;
[SyncVar(hook=“OnChangeHealth”)]
public int currentHealth=maxHealth;
void Start()
{
如果(this.gameObject.name==“GrayPlanet(克隆)”)
{
currentHealth=随机范围(0,50);
PlanetHealth.text=currentHealth.ToString();
}
其他的
PlanetHealth.text=maxHealth.ToString();
}
公共财产损失(整数金额)
{
如果(!isServer)
{
返回;
}
currentHealth-=金额;

如果(currentHealth,只需在
Start()方法的开头添加以下内容:

if (!isServer)
{
    return;
}

您应该只在服务器端执行随机生成。之后,
SyncVar
将执行保持实例最新的任务。

这可能有助于它现在不起作用客户端的所有行星都在0。您应该在
Start
方法中的
else
之后添加
currentHealth=maxHealth