使用Multiplayer Networking做一个简单的多人游戏例子-1/3
使用Multiplayer Networking做一个简单的多人游戏例子-2/3
使用Multiplayer Networking做一个简单的多人游戏例子-3/3
上一篇中血条还没有同步到所有客户端,下面添加血条同步。主要用到[SyncVar]同步变量。
13. 网络同步血条
- 打开Health脚本
- 添加命名空间UnityEngine.Networking
using UnityEngine.Networking;
- 添加继承关系为NetworkBehaviour
public class Health : NetworkBehaviour
- 为currentHealth添加[SyncVar]
[SyncVar]
public int currentHealth = maxHealth;
- 在TakeDamage函数中增加仅在Server端执行
if (!isServer)
{
return;
}
最终Health脚本如下:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using System.Collections;
public class Health : NetworkBehaviour {
public const int maxHealth = 100;
[SyncVar]
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!");
}
healthBar.sizeDelta = new Vector2(currentHealth, healthBar.sizeDelta.y);
}
}
此时运行测试,你会发现只有客户端的血条会变化,所以我们需要修改血条变化方法
- 打开Health脚本
- 将血条修改的代码移到新函数OnChangeHealth中
void OnChangeHealth (int currentHealth)
{
healthBar.sizeDelta = new Vector2(health, currentHealth.sizeDelta.y);
}
- 修改currentHealth的SyncVar属性
[SyncVar(hook = "OnChangeHealth")]
最终Health代码: