如何在Unity中实现多人画布UI?

时间:2017-11-04 22:10:50

标签: c# unity3d multiplayer

我在Unity多人游戏中使用画布UI。基本上,我需要控制移动和拍摄,我需要它们作为按钮。

当我启动多人游戏作为主机我的按钮工作。然后我启动一个客户端,主机按钮停止工作(客户端按钮工作)。我想这是因为有一个EventSystem,我认为它被客户端接管。

任何人都知道我应该如何在Unity中处理这个问题?

1 个答案:

答案 0 :(得分:-1)

下午,基本上你的问题非常广泛,因为Unity3d可用于网络的方式非常少,你的一个问题可能是服务器同步;变量也是如此,要正确存储变量,必须将它们与服务器实例同步。

您的客户的健康状况可能会存储并显示在他们的屏幕上,但您是否可以在其他计算机上看到它,很可能不会,为什么会这样?

这可能是因为健康 - " Bar",并未显示在游戏的所有实例上,包括主机以及其他连接的客户端!

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

public class Health : NetworkBehaviour {

public const int maxHealth = 100;

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

public RectTransform healthBar;

public void TakeDamage(int amount)
{
    if (!isServer)
        return;

    currentHealth -= amount;
    if (currentHealth <= 0)
    {
        currentHealth = 0;
        Debug.Log("Dead!");
    }
}

void OnChangeHealth (int health)
{
    healthBar.sizeDelta = new Vector2(health, healthBar.sizeDelta.y);
}
}

此变量使用&#34;状态同步&#34;,这是来自服务器并分发到远程客户端,因为本地客户端没有序列化数据;所以客户端与服务器共享场景,客户端上的序列化数据不会工作但是!可以在客户端上调用SyncVar挂钩!

你会以这种方式处理大多数数据,就像你的&#34; Canvas UI&#34;输入!