我在Unity多人游戏中使用画布UI。基本上,我需要控制移动和拍摄,我需要它们作为按钮。
当我启动多人游戏作为主机我的按钮工作。然后我启动一个客户端,主机按钮停止工作(客户端按钮工作)。我想这是因为有一个EventSystem,我认为它被客户端接管。
任何人都知道我应该如何在Unity中处理这个问题?
答案 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;输入!